То, что вы делаете неправильно, в основном, ожидает, что асинхронные обратные вызовы .then()
завершатся в порядке строк, как если бы они были синхронными. Важно понимать, что .then()
обратные вызовы выполняются после завершения текущего потока событий.
Хотя await
является просто синтаксической альтернативой для .then()
, она в значительной степени позволяет писать асинхронный код в той же степени, что и это было бы, если бы оно было синхронным.
Как правило, в любой заданной функции рекомендуется не смешивать синтаксис .then()
и await
Предполагая, что barDocument.data()
является синхронным, все должно быть так просто ...
...
try{
let manyBars = await documentRef.collection('bar').listDocuments();
let barDocuments = await Promise.all(manyBars.map(barItem => barItem.get()));
let foo.bars = barDocuments.map(barDocument => barDocument.data());
}
catch(error) {
console.log(error);
// handle error as necessary.
// return a value or re-throw the error.
}
Если barDocument.data()
является асинхронным, то вам нужно будет ввести еще один await Promise.all(...)
.