在一个异步函数中等待多个承诺

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')
    } 
}

这里所有的promise*函数都会发起一个ajax调用,并且如果传入的参数得到满足,就会返回true或者false。我相信我不能在连续使用三个awaits,因此需要一种方式来等待所有这些调用以某种方式返回它们的值。


我曾经遇到过类似的问题。也许这可以帮助你。在我的情况下,我正在使用jQuery promises。http://stackoverflow.com/questions/37658721/strange-unexpected-jquery-promise-reject-behaviour - Mayday
2
@Mayday Promise.all 看起来很有前途(没有双关语)。 - Ilja
1
我对es7不是100%熟悉,但是promise.all呢? - Shilly
2
“我相信我不能连续使用3个await” - 当然可以,你认为有什么问题吗?(尽管你可能不想这样做) - Bergi
1个回答

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')
  } 
}

4
这也有好处,即所有三个请求都是同时进行,而不是一个接一个地进行。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接