如何使用Eddy Verbruggen的nativescript-plugin-firebase插件读取Firebase数据库中节点的值?
我想阅读路径的内容:
/players/{player_id}
是否有类似于FIRDatabaseRef.observeSingleEvent()(在iOS SDK中)或firebase.database()。once()(在js SDK中)?
在nativescript-plugin-firebase插件中,我尝试使用firebase.addValueEventListener(),但是它接收回调作为参数,我真的很喜欢一个方法,它返回一个带有读取值的Promise。此外,我需要在执行读取后手动删除观察者。
使用firebase.query()似乎也不太合适,因为我需要设置过滤器,范围和查询来读取特定路径中的单个值。肯定有一种更好的方式!
谢谢!
答案 0 :(得分:0)
我最终使用firebase.query()和singleEvent = true。为此,我创建了一个名为once()的函数:
once(path, key) {
return firebase.query(
()=>{},
path,
{
singleEvent: true,
orderBy: {
type: firebase.QueryOrderByType.KEY
},
ranges: [{
type: firebase.QueryRangeType.EQUAL_TO,
value: key
}],
limit: {
type: firebase.QueryLimitType.FIRST,
value: 1
}
})
.then(
queryResult => {
// A query result contains a dictionary containing all objects that matched the query criteria. As we are interested on obtaining a single object, we can assume that dictionary will have only a single element.
//
let queryValue = queryResult.value;
let keys = Object.keys(queryValue);
if (keys.length > 0) {
let key = keys[0]
let value = queryValue[key];
return Promise.resolve(value);
} else {
return Promise.resolve(null);
}
}
)
}
可以这样使用:
once("/players", userId).then(userData => {console.log(userData)})
我不确定我非常喜欢这种方法。似乎使用查询来访问特定节点可能是有用的。我仍在寻找更好的解决方案。感谢。