async/await 如何处理异步函数中的回调?
How does async/await work with callbacks in the async function?
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
只需要 return newPhotoPromises
的结果,而 syncAvatar
可以在后台发生。
你在上面说“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
被解析。 一切 等待 promise 被解析:函数本质上暂停。
一个async
函数依次总是returns一个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
}
我注意到 syncAvatar
似乎有效,但我不确定我是否只是走运。如果是这样,我如何确保 syncAvatar
仅在 newPhotoPromises
完成后运行?
澄清一下,syncAvatar
需要在 newPhotoPromises
完成后发生,但是 setMyPhotos
只需要 return newPhotoPromises
的结果,而 syncAvatar
可以在后台发生。
你在上面说“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
被解析。 一切 等待 promise 被解析:函数本质上暂停。
一个async
函数依次总是returns一个Promise
,就像上面的等效代码一样。