问题:
是否可以等待启动新异步函数的异步函数?
详细信息:
我已经找到了很多方法来等待异步函数完成,然后继续代码,或者运行特定的函数或代码块。但是有一件事困扰了我很长一段时间--我不知道启动的新异步函数是否也在等待,或者它们是否需要考虑它们自己的代码。
伪码:
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函数?
发布于 2015-12-01 09:59:54
不,调用时不等待async函数。他们只是返回一个承诺。
在async函数中--这是它们的优势--您可以显式地实现await承诺,包括从其他async函数返回的承诺。
您的代码应该使用返回值编写,如下所示:
(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(…);
}
}())发布于 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问题。
发布于 2020-01-15 15:01:29
除了上面的例子,请看下面的代码示例。异步和等待的概念将更加清晰。
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();https://stackoverflow.com/questions/34017413
复制相似问题