gpt4 book ai didi

Javascript - 使用新的异步函数等待异步函数

转载 作者:行者123 更新时间:2023-12-02 15:21:25 26 4
gpt4 key购买 nike

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

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

伪代码:

var value = 1;
af1();
alert(value);

async function af1(){
af2();
}

async function af2(){
af3();
}

async function af3(){
value = 2;
}

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

那么,是否有可能将所有这些包装成某些东西并在完成后运行一些代码?或者我对 jQuery 的 deferred 和 .done 函数有什么误解??

最佳答案

不,调用时不会等待async函数。他们只是返回 promise .

async函数内部 - 这是它们的优势 - 您可以显式await promise ,包括从其他async函数返回的 promise 。

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

(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 来实现闭包方法:

(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(…);
}
}())

关于Javascript - 使用新的异步函数等待异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com