使用NativeScript从Firebase数据库读取特定节点
问题描述:
如何使用Eddy Verbruggen的nativescript-plugin-firebase插件读取Firebase数据库中某个节点的值?使用NativeScript从Firebase数据库读取特定节点
我想读路径的内容:
/players/{player_id}
是否有类似FIRDatabaseRef.observeSingleEvent(东西)(请在iOS版SDK)或firebase.database()一次()(在js SDK)?
在nativescript-plugin-firebase插件中,我尝试使用firebase.addValueEventListener(),但是它接收到一个回调作为参数,我真的很想用一个方法返回带有读取值的Promise。另外,我需要在执行读取后手动删除观察者。
使用firebase.query()也不太合适,因为我需要设置过滤器,范围和查询来读取特定路径中的单个值。当然必须有更好的方式!
谢谢!
答
我结束了与singleEvent = true使用firebase.query()。为此,我创建了一个名为一次()函数:
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)})
我不知道我喜欢这种方法非常多。似乎使用查询来访问特定的节点可能是无益的。我仍在寻找更好的解决方案。谢谢。