【发布时间】:2018-02-21 22:23:31
【问题描述】:
我正在使用 Firebase 构建一个购物车,当用户支付了一个功能触发器并且我从购物车中获取了所有商品然后我创建了一系列产品 ID(pid)之后,我想搜索商店 ID每个项目都通知他们。
商店 ID 是产品节点中的子节点。 产品->{pid}->sid
这就是我得到pid后的做法
.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 不好?你认为嵌套循环也很糟糕吗?
-
我知道这无关紧要,但我建议将完善的 SQL 用于购物车目的。否则你最终会得到很多要维护的引用。
-
@Bergi 我认为嵌套 promise 不好,因为我收到了来自 Eslint 的警告,如果您确定不是问题,那么我可以忽略此警告
-
哦,谢谢@user1027620 的建议,我虽然在firebase上可能是一样的。
标签: javascript firebase firebase-realtime-database google-cloud-functions