2017-01-27 81 views
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可以在后台发生。

+0

异步/等待是C#? – jdmdevdotnet

+3

JavaScript ES7呢! – kayla

+0

我很困惑,因为标签是唯一的JavaScript的:P – jdmdevdotnet

回答

2

你说上面“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执行功能的其余部分之前得到解决。 一切等待承诺解决:功能基本暂停。

An async功能反过来总是返回一个Promise,就像上面的等效代码。