【问题标题】:firebase - handle no data from snapshotfirebase - 不处理来自快照的数据
【发布时间】:2015-08-05 04:00:57
【问题描述】:

我有一个 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 中没有返回数据时,有没有办法处理?

任何见解将不胜感激。谢谢

【问题讨论】:

标签: javascript firebase


【解决方案1】:

here 的文档中阅读此内容后:

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

我能够使用 "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();

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

【讨论】:

  • 请记住,value 将在任何子节点的任何值发生更改时被触发,并将下载整个集合。所以最好不要将它与 on() 一起用于集合。
  • 是的,你是对的。在我做出改变之后,我意识到了这一点。似乎 child_added 仍然是我需要的,我只是不知道为什么它不会触发回调,无论是否像“value”那样返回任何数据
  • 查看我分享的链接。这是确定“初始数据”是否已加载的最佳方法,但一般来说,这是 Firebase 的一个有缺陷的表示,意味着您并没有真正接受实时方面。我建议跳过微调器——Firebase 数据通常需要几毫秒才能返回——以及初始数据与未来数据的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2012-06-15
  • 2020-06-19
  • 2020-06-11
相关资源
最近更新 更多