从firebase列表中获取单个项目
Obtaining a single item from firebase list
Firebase允许您查询列表中的单个值,如果您知道它是键。然而,如果没有键,在列表中获取单个值似乎很棘手。
我已经能够检索所需的项目,但是解决方案似乎冗长和有点黑客。
下面是我的函数:(fbutil是我的firebase url参考库)function getCopy(number){
var defer = $q.defer();
var ref = fbutil.ref('copies').orderByChild("number").equalTo(number);
ref.once("value",function(copySnap){
if(!copySnap.exists()){
defer.reject(null);
}else{
var listObj = copySnap.val();
var list = Object.keys(listObj).map(function(copy){
return listObj[copy]});
defer.resolve(list[0]);
}
})
return defer.promise;
}
这段代码确实工作,但我想知道是否有更好的方法来获得项目。是否有一个firebase功能,我错过了?或者用更简洁的方式提取项目?
你的函数可以更简单一些。
使用Firebase 3 API:
once
函数返回一个promise,因此您不需要创建自己的promise。您还可以使用快照的forEach
函数枚举子节点—返回true
使第一个子节点之后的枚举短路:
function getCopy (number) {
var ref = fbutil.ref('copies').orderByChild("number").equalTo(number);
return ref.once("value").then(function (copiesSnap) {
var result = null;
copiesSnap.forEach(function (copySnap) {
result = copySnap.val();
return true;
});
return result;
});
}
与Firebase 2 API:
once
不返回承诺,但您仍然可以使用快照的forEach
函数枚举子节点—返回true
使第一个子节点之后的枚举短路:
function getCopy (number) {
var defer = $q.defer();
var ref = fbutil.ref('copies').orderByChild("number").equalTo(number);
ref.once("value", function (copiesSnap) {
var result = null;
copiesSnap.forEach(function (copySnap) {
result = copySnap.val();
return true;
});
defer.resolve(result);
});
return defer.promise;
}
相关文章:
- 如何将jquery动画应用于单个项目
- Angular Grocery List-删除单个项目
- angularjs中列表中单个项目的独立范围
- 有没有办法让数组中的单个项目标识包含自身的相同数组对象
- Knockoutjs:如何将单个项目从可观察数组传递到我的视图模型中
- Jquery为fadeIn选择单个项目
- Extjs使用复选框模型在网格上拖放单个项目
- jQuery每个循环-显示单个项目
- WishList布尔切换按钮切换ng重复中的所有项目,而不是单个项目
- 我应该如何要求或使用相同的模块在多个文件中的单个项目
- Firebase获得单个项目
- react.js中的内联编辑无法打开单个项目
- 确定Redux中单个项目的本地缓存是否过期
- 从firebase列表中获取单个项目
- 如何正确初始化jQuery Tools'单个项目的可滚动组件
- 为列表中的单个项目打开一个弹出窗口
- 在鼠标悬停的工具提示中显示单个项目的详细信息
- 如何取消选择列表框中的单个项目
- 拖动和旋转单个项目
- 对“单个项目”的反应方式是什么