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
}
我注意到syncAvatar
似乎有效,但我不确定我是否只是幸运。如果是这样,我如何确保syncAvatar
仅在newPhotoPromises
完成后运行?
要澄清一下,syncAvatar
需要在newPhotoPromises
完成后发生,但setMyPhotos
只需要返回newPhotoPromises
的结果,而syncAvatar
可能会发生在后台。
答案 0 :(得分:2)
您在上面说“async
是Promise
”。你是对的。它是。对于承诺而言,它基本上是语法糖,使它们在某些情况下更容易遵循。
在这种情况下,函数实际上可以重写为如下所示:
setMyPhotos() {
return Promise.all(newPhotoPromises)
.then(newPhotos => {
someOtherPromise();
syncAvatar(newPhotos[0], function(res, err) {
if (!err) console.log("avatar sync'd");
});
return newPhotos;
});
}
await
基本上告诉Javascript引擎在执行函数的其余部分之前等待Promise
被解析。 一切等待承诺得到解决:功能基本上暂停。
async
函数依次总是返回Promise
,就像上面的等效代码一样。