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

4

1 回答 1

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;
    });
}

awaitPromise基本上告诉 Javascript 引擎在执行其余函数之前等待解析。一切都在等待 promise 被解决:函数本质上是暂停。

async反过来,函数总是返回a Promise,就像上面的等效代码一样。

于 2017-01-27T21:34:18.287 回答