gpt4 book ai didi

javascript - 如何将项目添加到 promise 之外的数组中

转载 作者:行者123 更新时间:2023-12-02 21:23:41 24 4
gpt4 key购买 nike

这个疑问是关于 promise 的。我需要将子集合“bar”的文档添加到 block 外部初始化的数组中

...
foo.bars = new Array<IBar>();
let manyBars = documentRef.collection('bar').listDocuments();
(await manyBars).forEach( barItem => {
barItem.get().then(barDocument => {

let bar: IBar = JSON.parse(JSON.stringify(barDocument.data()));
if (foo.bars !== null) {
foo.bars.push(bar);
console.log('in');
}
});
});

console.log('out');

我的 console.log() 首先打印“out”,然后打印“in”。我究竟做错了什么?forEach 方法有“await”。

最佳答案

您做错的主要是期望异步 .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(...)

关于javascript - 如何将项目添加到 promise 之外的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com