【问题标题】:React Native Firebase transaction not working properlyReact Native Firebase 事务无法正常工作
【发布时间】:2019-12-28 01:43:39
【问题描述】:

我正在使用 React Native 和 Firebase 实时数据库开发应用程序。

在数据库中,我有一些数据如下。

myRoot
  |
  |--myValue1: 0
  |
  |--myValue2: 2

然后,我想将这些值加一并得到以下结果。

myRoot
  |
  |--myValue1: 1
  |
  |--myValue2: 3

为此,我使用了如下函数。

myFunction = () => {
   const myRef = firebase.database().ref('myRoot');

   return myRef.transaction((data) => {
      data.myValue1++;
      data.myValue2++;
      return data;
   })
   .then(console.log('Done'))
   .catch((error) => console.log(error));
}

但是,调用该函数后,我得到以下错误。

[Unhandled promise rejection: TypeError: null is not an object (evaluating 'data.myValue1')]

我尝试获取myRef 中的snapshot 并在控制台中打印。它工作并打印了当前值。但是,transaction 不起作用并给出null

请帮我解决这个问题。

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database


    【解决方案1】:

    您需要检查data 是否为空,因为第一次调用事务处理函数时会发生这种情况。如果快照存在于您正在执行事务的数据库的位置,则将使用快照再次调用处理程序。您可以在documentation 的示例代码中看到正在执行此检查。

    【讨论】:

    • 它看起来类似于我链接到的文档中的代码。在快照最初为空的情况下,您必须决定要做什么,然后自己编写。
    • 我试过了。但是,它只是避免了错误。但是,不会更新值。
    【解决方案2】:

    我相信 Sennen 是这样的:

    myFunction = () => {
       const myRef = firebase.database().ref('myRoot');
    
       myRef.transaction((data) => {
            if(data) {
                if(data.myValue1) {
                    data.myValue1++;
                } 
                if(data.myValue2) {
                    data.myValue2++;
                }
            }
    
            return data;
       })
       .then(console.log('Done'))
       .catch((error) => console.log(error));
    }
    

    【讨论】:

    • 我试过了。但是,它只是避免了错误。但是,不会更新值。
    【解决方案3】:

    找到导致问题的原因。代码段很好。问题出在依赖项中。只需执行npm install firebase --save 然后npm install。重新启动项目。成功了!

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 2018-06-13
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2017-11-28
      相关资源
      最近更新 更多