我用Firebase建立一个购物车,当用户支付了一个功能触发器,然后我从购物车中获取了所有商品,然后我创建了产品ID(pids)之后,我想搜索每个商品的商店ID通知他们。
商店标识是产品节点中的子项。产品介绍 - > {PID} - > SID
这是我获得pids后的方式
.then(snap => {
return pids.forEach( pids => {
productIdRef = root.child(`/products/${pids}`);
//Here I should create a promise to get the Stores Ids:
// productIdRef.once("value")....
});
这是承诺的承诺,据我所知并不好。
那么我可以采取哪些措施来避免嵌套承诺,或者由于Firebase数据库设计不好而从一开始就注定要失败?
更新:完整功能:
var itemsRef = NOTIFICATION_SNAPSHOT.adminRef.parent.child('items');
var pids = [];
return itemsRef.once('value').then(snapshot => {
return snapshot.forEach((childSnapshot) => {
pids.push(childSnapshot.key);
});
}).then(snap => {
return pids.forEach(pids => {
productIdRef= root.child(`/products/${pids}`).once('value');
});
}).catch(error => {
// Something went wrong.
console.error(error);
});
我不确定嵌套是什么意思
也许像下面这样使用Promise.all
:
.then(snap => {
return Promise.all(pids.map(pid => {
return root.child(`/products/${pid}`);
}));
}).then((storeIds) => {
// result of root.child()
});