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