【问题标题】:Read a specific node once from a Firebase Database using NativeScript使用 NativeScript 从 Firebase 数据库中读取特定节点一次
【发布时间】:2018-03-17 17:37:31
【问题描述】:

如何使用 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() 似乎也不太正确,因为我需要设置过滤器、范围和查询来读取特定路径中的单个值。肯定有更好的办法!

谢谢!

【问题讨论】:

    标签: typescript firebase firebase-realtime-database nativescript angular2-nativescript


    【解决方案1】:

    我最终将 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)})
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 2019-02-07
      • 2021-01-29
      • 2022-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多