2016-09-07 84 views
3

我試圖採取的ES7異步功能,即等待一個異步函數幾個承諾

async function stepVerifyIdentity(nextState, replace, callback) { 
    const val1 = await promise1('Param1') 
    const val2 = await promise2('Param2') 
    const val3 = await promise3('Param3') 
    if (!val1 && (!val2 || !val3)) { 
     console.log('Do something') 
    } 
} 

這裏所有承諾*功能使Ajax調用的優勢,並返回要麼truefalse,如果傳遞的參數是由阿賈克斯滿意響應,我相信我不能連續使用3個等待,因此需要一種方法來等待所有這些調用以某種方式返回它們的值。

+0

我也有類似的問題。也許這可以幫助你。在我的情況下,我使用jQuery的承諾。 http://stackoverflow.com/questions/37658721/strange-unexpected-jquery-promise-reject-behaviour – Mayday

+2

@五月'Promise.all'看起來很有前途(沒有雙關語) – Ilja

+1

我不是100%熟悉es7,但promise.all? – Shilly

回答

6

您可以隨意多次使用await,因此您的示例可以按照您的要求進行操作。

但是,也許你會考慮Promise.all漂亮:

async function stepVerifyIdentity(nextState, replace, callback) { 
    const [ val1, val2, val3 ] = await Promise.all([ 
    promise1('Param1'), 
    promise2('Param2'), 
    promise3('Param3') 
    ]) 

    if (!val1 && (!val2 || !val3)) { 
    console.log('Do something') 
    } 
} 
+4

這也有一個好處,即所有三個請求都是並行完成的,而不是一個接一個地完成。 – Thomas