2017-01-27 113 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,就像上面的等效代碼。