Javascript async/await如何处理异步函数中的回调?
我注意到,Javascript async/await如何处理异步函数中的回调?,javascript,ecmascript-2017,Javascript,Ecmascript 2017,我注意到,syncAvatar似乎起作用了,但我不确定自己是不是运气好。如果是这样,我如何确保syncAvatar仅在newPhotoPromises完成后运行 为了澄清,syncAvatar需要在newPhotoPromises完成后进行,但是setMyPhotos只需要返回newPhotoPromises的结果,而syncAvatar可以在后台进行。您在上面说过“async是一个Promise事情”。你说得对。它是。它基本上是围绕承诺的语法糖分,以使它们在某些上下文中更易于遵循 在这种情况下
syncAvatar
似乎起作用了,但我不确定自己是不是运气好。如果是这样,我如何确保syncAvatar
仅在newPhotoPromises
完成后运行
为了澄清,syncAvatar
需要在newPhotoPromises
完成后进行,但是setMyPhotos
只需要返回newPhotoPromises
的结果,而syncAvatar
可以在后台进行。您在上面说过“async
是一个Promise
事情”。你说得对。它是。它基本上是围绕承诺的语法糖分,以使它们在某些上下文中更易于遵循
在这种情况下,函数实际上可以重写为如下所示:
async setMyPhotos() {
const newPhotos = await Promise.all(newPhotoPromises);
someOtherPromise(); // will wait for newPhotoPromises
syncAvatar(newPhotos[0], function(res, err) { // does this wait for newPhotoPromises too?
if (!err) console.log("avatar sync'd");
});
return newPhotos; // return just needs to wait for newPhotoPromises
}
wait
基本上告诉Javascript引擎在执行函数的其余部分之前等待Promise
被解析一切都等待承诺得到解决:函数基本上暂停
async
函数反过来总是返回一个Promise
,就像上面的等效代码一样。async/await也是C#?JavaScript ES7!我很困惑,因为标签只是javascript:PIt并不是“回调也能工作”。它是执行暂停,直到等待得到满足。然后,执行接下来的任何操作。async/await
不是ES7(ES2016)的一部分。这将是今年发布的ES2017的一部分。
setMyPhotos() {
return Promise.all(newPhotoPromises)
.then(newPhotos => {
someOtherPromise();
syncAvatar(newPhotos[0], function(res, err) {
if (!err) console.log("avatar sync'd");
});
return newPhotos;
});
}