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 可以在后台发生。

你在上面说“asyncPromise 的东西”。你是对的。这是。它基本上是围绕承诺的语法糖,使它们在某些情况下更容易遵循。

在这种情况下,该函数实际上可以重写为如下所示:

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,就像上面的等效代码一样。