【问题标题】:React Promise Return Firebase ArrayReact Promise 返回 Firebase 数组
【发布时间】:2018-12-05 11:48:26
【问题描述】:

我很难解决我目前遇到的这个问题。你看,我使用 Firebase 作为我的数据库来存储和获取数据。

现在,我希望能够返回在 Firebase .once 调用中创建的数组,但我遇到了一些困难。到目前为止,这是我的代码:

调用函数(返回函数):

<p>{this.fetchStartingPrice(singleProduct.id)}</p>

这是我想要显示特定值的地方,我试图在下面获取:

fetchStartingPrice(category){
        let promises = [];

        promises.push(this.fetchPrices(category));

        Promise.all(promises).then(result => {
            console.log(result);
        })
    }

我刚刚使用了一个 console.log 来尝试解决错误。

fetchPrices(category){
        var allPrices = [];
         allProductsFirebase.child(category).once('value', (snapshot) => {
            snapshot.forEach((childSnapshot) => {
                if(childSnapshot.key == category){
                    allPrices.append(childSnapshot.val().brand);
                }
            });
            return allPrices;
        })
    }

所以基本上,我想遍历 allProductsFirebase 以尝试首先识别产品的品牌,如果它与 fetchStartingPrice() 和 fetchPrises() 中用作参数的品牌匹配,我想要将该产品的具体价格存储在一组数字(价格)中。在遍历整个快照后,我想返回仅包含产品价格的完整数组,然后通过fetchStartingPrice(),我想使用Math.min(promises) 来获取该数组中的最低数字。但是,我很难做到这一点。有人可以帮我解决这个问题吗?

在这一切之后,我希望能够返回 fetchStartingPrice() 中的值。

【问题讨论】:

    标签: arrays reactjs firebase firebase-realtime-database promise


    【解决方案1】:

    fetchPrices() 必须返回 Promise 或为 Promise。你没有从fetchPrices() 返回任何东西(你在.once() 范围内返回allPrices)。尝试返回.once() 返回的结果(如果它返回Promise)。

    fetchPrices(category){
        var allPrices = [];
         return allProductsFirebase.child(category).once('value', (snapshot) => {
            snapshot.forEach((childSnapshot) => {
                if(childSnapshot.key == category){
                    allPrices.append(childSnapshot.val().brand);
                }
            });
            return allPrices;
        })
    
    }
    

    【讨论】:

    • Promise.all Promise.all 将一组承诺作为参数。但是您正在放置undefineds 的数组。
    • 感谢您的回答,deebov。但是,实际上我也尝试过这种方法,但问题是;当我在 fetchStartingPrice() 中打印结果时,它只返回一个 DataSnapshot。您碰巧知道解决方案吗?
    • 看,我也遇到过类似的问题。我正在构建电子商务应用程序。但我改用 Firestore。因为有了它,我可以更好地处理数据。如果返回DataSnapshot,可以调用DataSnapshot.data()获取数据。这将返回真实数据
    • 我明白了。有什么办法可以避免使用 Firestore?我花了 3 个月时间开发的电子商务解决方案完成了 99.9% 的工作,不幸的是,目前无法选择切换到 Firestore。但是,感谢您提供的信息。我很感激。
    • 兄弟,我想我找到了。这就是你需要的firebase.google.com/docs/reference/js/…
    猜你喜欢
    • 2020-03-31
    • 2022-12-22
    • 2018-10-24
    • 2017-05-07
    • 2023-03-11
    • 2021-01-15
    • 2021-05-31
    • 2021-12-16
    • 2021-04-03
    相关资源
    最近更新 更多