需要使用val()将对象推入firebase数组

时间:2018-03-27 13:22:04

标签: javascript firebase

我最近开始使用React.js中的Firebase开发 -

目前,我正试图从数据库中提取并使用数据创建一个新对象。

这是代码:

var arr = firebase.database().ref("news");//this is the ref.

arr.once('value', function (snapshot) {//will return the array value
    model = {//this is the model i want to .push()
        title: title,
        content: content,
        img: img,
        category: category,
        likes: likes,
        id: snapshot.val().length//This is where I want to add the arr.length
    };

    var promise = arr.push(model);

    promise.then(function(){
        ...
    })
})

问题是arr.push(model)在加载model.id变量之前运行。

2 个答案:

答案 0 :(得分:1)

这里发生的是snapshot.val()返回一个对象而不是一个数组。因此,如果您尝试访问snapshot.val()。length。

,它将返回undefined

现在的解决方案是将对象转换为数组以获取计数。

id: Object.keys(snapshot.val()).length

这可能会解决您的问题。

很抱歉,如果这不是你想要的。

答案 1 :(得分:0)

@Meghashyam解决方案应该有效。 Firebase还有一个实用程序snapshot.numChildren();,它将返回numberDataSnapshot个子属性,如果对象为空,它将返回0

model = {
    title: title,
    content: content,
    img: img,
    category: category,
    likes: likes,
    id: snapshot.numChildren()
};

您可以查看更多详细信息here