【问题标题】:Awaiting several promises in one async function在一个异步函数中等待多个 Promise
【发布时间】:2017-01-15 06:22:53
【问题描述】:

我正在尝试利用 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 调用并返回 truefalse 如果 ajax 响应满足传递的参数,我相信我不能连续使用 3 个等待,因此需要一种等待的方法让所有这些调用以某种方式返回它们的值。

【问题讨论】:

  • 我遇到了类似的问题。也许这对你有帮助。就我而言,我使用的是 jquery 承诺。 stackoverflow.com/questions/37658721/…
  • @Mayday Promise.all 看起来很有希望(没有双关语)
  • 我不是 100% 熟悉 es7,但是 promise.all ?
  • "我相信我不能连续使用 3 次等待" - 当然可以,您认为这有什么问题? (虽然你may not want it

标签: javascript async-await ecmascript-next


【解决方案1】:

您可以根据需要多次使用await,这样您的示例就可以满足您的需求。

不过,也许你会考虑Promise.allprettier:

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

【讨论】:

  • 这还有一个好处是所有三个请求都是并行完成的,而不是一个接一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
相关资源
最近更新 更多