0

如何使用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()也不太合適,因爲我需要設置過濾器,範圍和查詢來讀取特定路徑中的單個值。當然必須有更好的方式!

謝謝!

回答

0

我結束了與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)}) 

我不知道我喜歡這種方法非常多。似乎使用查詢來訪問特定的節點可能是無益的。我仍在尋找更好的解決方案。謝謝。

相關問題