我有一个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中没有数据返回时,有没有办法处理?
任何见解都会受到很多赞赏。感谢
答案 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();
有了这个,我就能得到我需要的东西。如果这对任何人都有帮助,那很好......