首页 > 解决方案 > 反应原生 Firebase。将数据推送到 firebase 数据库后,我在 then() 中得到 null 而不是快照

问题描述

我使用 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()我应该得到插入数据的快照,但我得到了null。这怎么可能?

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

标签: firebasereact-nativereact-reduxreact-native-firebase

解决方案


根据 Firebase 文档(https://rnfirebase.io/docs/v5.xx/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 的评论和关于这个 Github 问题

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

您应该能够执行以下操作:

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

推荐阅读