Ожидание нескольких промисов в одной асинхронной функции

Я пытаюсь воспользоваться асинхронными функциями 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, если переданные параметры удовлетворяются ответом ajax, я считаю, что не могу использовать 3 ожидания подряд, поэтому мне нужен способ дождаться возврата всех этих вызовов как-то их значения.


person Ilja    schedule 07.09.2016    source источник


Ответы (1)


Вы можете использовать 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')
  } 
}
person sdgluck    schedule 07.09.2016
comment
это также имеет то преимущество, что все три запроса выполняются параллельно, а не один за другим. - person Thomas; 07.09.2016