反应本地Firebase。将数据推送到Firebase数据库后,我在null()中获得null而不是快照

时间:2018-10-06 20:48:48

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

我将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的属性“键”

1 个答案:

答案 0 :(得分:2)

根据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在这里和this Github issue上的评论:

  

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

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

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