首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -等待具有新异步函数的异步函数

Javascript -等待具有新异步函数的异步函数
EN

Stack Overflow用户
提问于 2015-12-01 09:54:05
回答 3查看 1.5K关注 0票数 0

问题:

是否可以等待启动新异步函数的异步函数?

详细信息:

我已经找到了很多方法来等待异步函数完成,然后继续代码,或者运行特定的函数或代码块。但是有一件事困扰了我很长一段时间--我不知道启动的新异步函数是否也在等待,或者它们是否需要考虑它们自己的代码。

伪码:

代码语言:javascript
复制
var value = 1;
af1();
alert(value);

async function af1(){
    af2();
}

async function af2(){
    af3();
}

async function af3(){
    value = 2;
}

我不知道这是否是一个很好的例子(甚至是正确的语法),但是将异步函数想象成一些需要一些时间才能完成的ajax请求。我有一种感觉,如果在af1上添加一个延迟的af1,它只会等待af1而忽略af2和af3。我还为其中一些函数使用了一个外部javascript文件,我实际上无法控制在其中启动了哪些新函数。

因此,是否有可能将所有这些都打包在一起,并在完成之后运行一些代码?还是我弄错了jQuery的延迟函数和.done函数?

EN

回答 3

Stack Overflow用户

发布于 2015-12-01 09:59:54

不,调用时不等待async函数。他们只是返回一个承诺

async函数中--这是它们的优势--您可以显式地实现await承诺,包括从其他async函数返回的承诺。

您的代码应该使用返回值编写,如下所示:

代码语言:javascript
复制
(async function() { // neccessary to use await
    value = await af1();
    alert(value);
}());
af1().then(alert); // or just using promise syntax

async function af1(){
    return af2();
}
async function af2(){
    return af3();
}
async function af3(){
    return 2; // or maybe rather something like
    return $.ajax(…);
}

但是您不需要返回值,您也可以在闭包方法中使用await

代码语言:javascript
复制
(async function() {
    var value = 1;
    await af1();
//  ^^^^^
    alert(value);

    async function af1(){
        await af2();
    }
    async function af2(){
        await af3();
    }
    async function af3(){
        value = 2; // or maybe rather something like
        value = await $.ajax(…);
    }
}())
票数 1
EN

Stack Overflow用户

发布于 2015-12-01 10:00:22

使用这个git js ASync

如何使用 异步提供了大约20个函数,其中包括通常的“函数”嫌疑人(map,reduce,filter,每个…)以及一些常见的异步控制流模式(并行、串联、瀑布式…)。所有这些函数都假定您遵循Node.js的惯例,提供单个回调作为异步函数的最后一个参数。 快速示例 Async.map(‘file 1’,‘file 2’,‘file 3’,fs.stat,函数(err,结果){ //结果现在是每个文件}的统计数据数组);async.filter(‘file 1’,‘file 2’,‘file 3’,fs.exists,函数(结果){ //结果现在等于现有文件}的数组);async.parallel(函数(){. },函数{.},回调);async.series(函数(){. },函数(){.} );

还有更多可用的函数,因此请查看下面的文档以获得完整的列表。这个模块的目标是全面的,所以如果你觉得有什么遗漏,请为它创建一个GitHub问题。

阅读更多

票数 1
EN

Stack Overflow用户

发布于 2020-01-15 15:01:29

除了上面的例子,请看下面的代码示例。异步和等待的概念将更加清晰。

代码语言:javascript
复制
async function doWork(){
    try {
        const response = await makeRequest('facebook'); //using await will wait until the response returned from the makeRequest function
        //console.log('Response Received' + response );

        const response2 = await makeRequest('google');
        //console.log('Response2 Received' + response2 );
    } catch(err) {
        alert(err);
    }
}

function makeRequest(str){
    //function body that takes time to process, eg: server call
    return "making request to " + str;
}

doWork();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34017413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档