Они разные. Самое большое отличие состоит в том, что в первом примере нужно дождаться завершения обещания 1, прежде чем даже пытаться выполнить обещание 2.
В первом примере поток выглядит следующим образом:
ВызовОбещание1
Ожидание завершения обещания1 и сохранение значения1
Вызов обещания2
ОжиданиеОбещание2 выполнить и сохранить в значении2
Во втором примере поток выглядит следующим образом:
Вызовите обещание1
Вызовите обещание2
Дождитесь завершения обещания 1 и обещания 2
Во втором примере оба обещания могут быть оба: обещание 1 и обещание 2вызван таким образом, что обещание2 не должно ждать завершения обещания 1.
Еще один способ, которым это может выглядеть, - использование Promise.all
ex:
const makeRequest = async () => {
const [value1, value2] = await Promise.all([promise1(), promise2()])
return promise3(value1, value2)
}
Обещание. все откроют оба обещания и подождут, пока они все не выполнятся, прежде чем вернуться:Затем значения romise помещаются в массив в том порядке, в котором обещания были в массиве обещаний. Используя destruuring , мы можем получить эти значения обратно из встроенного массива значений.