gpt4 book ai didi

javascript - Promise.all 不等待所有 Promise 完成 firestore 数据读取

转载 作者:行者123 更新时间:2023-11-29 18:55:28 25 4
gpt4 key购买 nike

我有以下数据结构,将作为文档添加到firestore 集合

{
".......": "......." //few more properties
"productInfo": {
"0": {
"code": "SC05",
"price": 400,
"productId": "asUsd1HPEPOo2itiKxdash",
".......": "......." //few more properties
"addOns": [{
"aid": "4casedasgdfdgfas",
"price": "50",
"......": "....." //few more properties
}]
}
}
}

所以我将拥有产品对象数组,每个产品将拥有插件对象数组。

我试图在将其保存为文档之前从数据库检索价格,因此我为该特定表编写了 .onCreate 函数。要检索 product 级别和 addon 级别的价格,我有 2 个 promise ,如下所示:

const productPromises = [];
_.map(products, (product) => {
productPromises.push(new Promise((resolve, reject) => {
db.doc(`product/${product.productId}`).get().then(docData => {
return resolve({
productId: product.productId,
halfkgprice: docData.data().halfkgprice,
price: docData.data().price
});
}).catch(reason => {
return reject(reason);
});
}));
});

const addonPromise = [];
_.map(products, (product) => {
addonPromise.push(new Promise((resolve, reject) => {
if (product.addOns !== undefined && product.addOns !== null) {
return _.map(product.addOns, (addon) => {
return db.doc(`addons/${addon.aid}`).get().then((addonData) => {
return resolve({
price: addonData.data().price
});
}).catch(reason => {
return reject(reason);
})
});
} else {
return resolve();
}
}));
});

然后我确实有

Promise.all([productPromises, addonPromise]).then(result => {
//do something with result
});

但这不会等待任何 promise 的解决。当我记录结果时,我得到如下结果。

console.log(result) will show [ [ Promise { <pending> } ], [ Promise { <pending> } ] ] and doesn't wait for them to resolve

我的问题是,为什么不等待所有的 promise 都得到解决?我从 firestore get query 返回数据的方式有问题吗?

最佳答案

productPromisesaddonPromise 是 Promise 数组,因此传递给 Promise.all 的数组是数组的数组,而不是数组 promise - 尝试

Promise.all([...productPromises, ...addonPromise]).then

此外,避免 Promise 构造函数反模式

_.map(products, (product) => {
productPromises.push(
db.doc(`product/${product.productId}`).get().then(docData => {
return ({
productId: product.productId,
halfkgprice: docData.data().halfkgprice,
price: docData.data().price
});
})
);
});

关于javascript - Promise.all 不等待所有 Promise 完成 firestore 数据读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665850/

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