2016-09-07 113 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