承诺内部forEach循环承诺,糟糕的firebase数据库设计?

问题描述 投票:1回答:1

我用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);
      });
javascript firebase firebase-realtime-database google-cloud-functions
1个回答
2
投票

我不确定嵌套是什么意思

也许像下面这样使用Promise.all

.then(snap => {
    return Promise.all(pids.map(pid => {
        return root.child(`/products/${pid}`);
    }));
}).then((storeIds) => {
    // result of root.child()
});
© www.soinside.com 2019 - 2024. All rights reserved.