【问题标题】:React Native Firebase. After pushing data to firebase database I get null instead of snapshot in then()反应原生 Firebase。将数据推送到 firebase 数据库后,我在 then() 中得到 null 而不是快照
【发布时间】:2018-10-06 20:48:48
【问题描述】:

我使用 React Native Firebase 来处理 Firebase。 在 redux 操作中,我有:

export const startAction = (item) => {


    return (dispatch) => {

        firebase.database().ref(`/users/${firebase.auth().currentUser.uid}/some/`)
            .push(item).then((snapshot) => {
                console.log('Added to firebase', snapshot,  snapshot.key);

            }).catch((err) => { console.log('errooooor', err) });
    }


}

then() 中,我应该得到插入数据的 snapshot,但得到的是 null。这怎么可能?

错误文本:无法读取 null 的属性“键”

【问题讨论】:

  • 您使用的是哪个 Firebase 版本?
  • 这是一个已知错误,我们会在 v5.1.0 中修复它 - 谢谢!
  • React Native Firebase - 4.3.8

标签: firebase react-native react-redux react-native-firebase


【解决方案1】:

根据 Firebase 文档 (https://rnfirebase.io/docs/v5.x.x/database/reference/Reference#push),Reference.push() 不会返回承诺。它返回一个引用。

如果您想知道对服务器的写入何时完成,您可以将回调函数作为第二个参数传递给.push() 函数。

export const startAction = (item) => {
    return (dispatch) => {
        firebase.database().ref(`/users/${firebase.auth().currentUser.uid}/some/`)
            .push(item, error => {
                if (!error)
                    console.log("Item added to firebase");
                else
                    console.warn("There was an error writing to the database, error);
            })
    }
}

编辑:基于 Salakar 的 cmets here 和 this Github issue:

没有 await 也是正确的,因为通过 push() 创建新的引用 + id 路径是同步/客户端的

您应该能够做到以下几点:

const ref = firebase.database()
                .ref(`/users/${firebase.auth().currentUser.uid}/some/`)
                .push(item)
// Now do something with `ref.key`

【讨论】:

  • 这是一个已知错误,我们会在 v5.1.0 中修复它 - 谢谢!
  • 只是为了确保我理解,你会让.push()返回一个承诺。对吗?
  • 它将与 Firebase Web SDK 相匹配,请参阅:github.com/invertase/react-native-firebase/issues/893
  • 我不仅需要知道何时完成对服务器的写入,还需要知道插入数据集的 ID,以便将其保存到 Redux 存储。工作停了,怎么办?删除RNFB并使用原始库?
  • 我用一个可能的解决方案更新了我的答案。看看@JohnSmith
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
相关资源
最近更新 更多