使用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)}) 

我不知道我喜欢这种方法非常多。似乎使用查询来访问特定的节点可能是无益的。我仍在寻找更好的解决方案。谢谢。