在一个异步函数中等待几个promise

Ilj*_*lja 3 javascript async-await ecmascript-next

我试图利用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')
    } 
}
Run Code Online (Sandbox Code Playgroud)

这里所有promise*函数都进行ajax调用并返回true或者false如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用返回它们的值不知何故.

sdg*_*uck 7

你可以随意使用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')
  } 
}
Run Code Online (Sandbox Code Playgroud)

  • 这也有利于所有三个请求并行完成,而不是一个接一个地完成. (4认同)