Я знаю, что делаю это:
const resultA = await a()
const resultB = await b()
// code here
эффективно
a().then( resultA => {
b().then( resultB => {
// code here
})
})
По сути, запускается a(), затем запускается b(). Я вложил их, чтобы показать, что и результат A, и результат B находятся в нашей области видимости; но обе функции не запускались одновременно.
Но как насчет этого:
const obj = {
result1: await a(),
result2: await b()
}
a() и b() выполняются одновременно?
Для справки:
const asyncFunc = async (func) => await func.call()
const results = [funcA,funcB].map( asyncFunc )
Я знаю, что здесь funcA
и funcB
работают одновременно.
Бонус:
Как бы вы представили назначение объекта
const obj = {
result1: await a(),
result2: await b()
}
используя then
/обратные вызовы?
ОБНОВИТЬ:
@Bergi прав в этом ответе, это происходит последовательно. Чтобы поделиться хорошим решением для одновременной работы с объектом без необходимости собирать объект из массива, можно также использовать Bluebird
следующим образом.
const obj2 = Bluebird.props(obj)
await
, вы должны сделать функцию стрелкиasync
, и тогда становится очевидным, что они могут выполняться одновременно, потому что они представляют собой отдельную оценку функции. - person Bergi   schedule 18.05.2017