Javascript-使用新异步函数等待异步函数
问题:Javascript-使用新异步函数等待异步函数,javascript,asynchronous,async-await,ecmascript-next,Javascript,Asynchronous,Async Await,Ecmascript Next,问题: 是否可以等待启动新异步函数的异步函数? 详细信息: 在继续编写代码或运行特定的函数或代码块之前,我已经找到了一些等待异步函数完成的方法。但有一件事困扰了我很长一段时间——我不知道启动的新异步函数是否也在等待,或者它们是否需要考虑自己的代码。 伪代码: var value = 1; af1(); alert(value); async function af1(){ af2(); } async function af2(){ af3(); } async f
是否可以等待启动新异步函数的异步函数?
详细信息:
在继续编写代码或运行特定的函数或代码块之前,我已经找到了一些等待异步函数完成的方法。但有一件事困扰了我很长一段时间——我不知道启动的新异步函数是否也在等待,或者它们是否需要考虑自己的代码。
伪代码:
var value = 1;
af1();
alert(value);
async function af1(){
af2();
}
async function af2(){
af3();
}
async function af3(){
value = 2;
}
我不知道这是不是一个很好的例子(或者甚至是正确的语法),但是把异步函数想象成一些需要一些时间才能完成的ajax请求。我有一种感觉,如果在af1上添加延迟的jQuery,它将只等待af1,而忽略af2和af3。我还为一些函数使用了一个外部javascript文件,我无法真正控制在其中启动哪些新函数
那么,是否可以将所有这些都打包成一些东西,并在完成之后运行一些代码呢?或者我对jQuery的延迟和.done函数的理解有误吗???否,
异步
函数在调用时不等待。他们只是回了一封信
在async
函数内部-这是它们的优势-您可以明确地等待
承诺,包括从其他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(…);
}
}())
使用这个GitJS
如何使用
Async提供了大约20个函数,其中包括常见的“功能性”可疑对象(映射、减少、过滤,每个…)以及异步控制流的一些常见模式(并行、串行、瀑布…)。所有这些函数都假定您遵循Node.js约定,提供单个回调作为异步函数的最后一个参数
快速示例
还有更多可用的功能,请查看下面的文档以获取完整列表。本模块旨在全面,因此如果您觉得缺少任何内容,请为其创建GitHub问题
除了上面的示例,请看下面的代码示例。异步和等待的概念将更加清晰
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();
你真的应该阅读关于承诺的内容。你应该勾选“它将[…]忽略af2和af3”-是的,当然,因为你甚至没有给他们打电话。您能添加一些调用使示例更真实一些吗?@mathkid91:谢谢,我修改了我的答案,现在它更有意义了:-)返回
承诺的函数是我将调用的异步函数,但并非所有异步函数都返回承诺。可以是基于回调的、基于CSP的,等等。@BjörnRoberg:OP正在谈论新的ES7建议的异步函数
s,它可以。我突出显示了关键字,以表明我不是指一般意义上的异步函数。很高兴得到确认,我必须处理每个函数。我想我得在我正在使用的图书馆里挖一些。谢谢你的回答@mathkid91:如果您使用的库不支持承诺(或者至少是一个+兼容的thenables,像jQuery一样),请看一看。否则,传输的async wait
应该是开箱即用的。感谢您的回答:)因为这也在注释中提到过,我将查找这是什么。如何将数据从async.parallel传递到async.瀑布
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();