firebase - 不处理快照中的数据

时间:2015-08-04 19:15:57

标签: javascript firebase

我有一个firebase引用,我在其中为我创建的特定自定义索引提取数据。

requestsRef
    .orderByChild('systemgameindex')
    .startAt(lastrequest.systemgameindex.toString())
    .endAt(lastrequest.systemgameindex.toString() + '~')
    .limitToFirst(customElem.dataops.limit + 1)
    .on('child_added', function (snapshot) {
        var request = snapshot.val() || {};

        request.key = snapshot.key();
        request.systemColor = customElem.getSystemColor(request.system);
        request.description = customElem.truncateText(request.description, 65);
        customElem.getUserProfile(request);
        customElem.getCommentCount(request.key);

        if (request.systemgameindex !== lastrequest.systemgameindex) { customElem.push('requests', request); };
            customElem.removeSpinnerRoo();
        });

在我调用firebase之前,我有一个自定义微调器,我使用一个名为 addSpinnerRoo()的函数进行显示,当返回数据时,我调用 removeSpinnerRoo( )隐藏DOM上的微调器。

当从firebase返回数据时,它运行得很漂亮,但如果firebase查询没有返回任何结果, child_added 上的回调永远不会被触发,所以我还有一个旋转器仍在旋转关于DOM。

当Firebase中没有数据返回时,有没有办法处理?

任何见解都会受到很多赞赏。感谢

1 个答案:

答案 0 :(得分:2)

here的文档中读到这个:

  

回调函数接收DataSnapshot,它是数据的快照。快照是单个时间点的特定数据库引用处的数据的图片。在快照上调用val()会返回数据的JavaScript对象表示形式。如果引用位置不存在数据,则快照值将为null。

我能够使用“val”而不是“child_added”来实际让firebase仍然触发“。on()”的回调。 方法。所以我的代码现在看起来像这样:

var data = snapshot.val();

if (data !== null && data !== undefined) {
    var requests = _.map(data, function (val, key) {
        val.key = key;
        return val;
    });

    _.each(requests, function (request) {

        request.systemColor = customElem.getSystemColor(request.system);
        request.description = customElem.truncateText(request.description, 65);
        customElem.getUserProfile(request);
        customElem.getCommentCount(request.key);
        customElem.push('requests', request);
    });
}
customElem.removeSpinnerRoo();

有了这个,我就能得到我需要的东西。如果这对任何人都有帮助,那很好......