【问题标题】:how to run firebase query inside a function in node js如何在节点js中的函数内运行firebase查询
【发布时间】:2018-08-21 17:58:52
【问题描述】:

我有一个函数应该查询 firebase db 并返回结果。

 function verifyToken(token)
 {
    var androidId = 'xxxxx';
    admin.database(dbDEV).ref('profiles').orderByChild('androidId').equalTo(androidId).on('value',(snapshot)=>{
    console.log(snapshot.val());
    return snapshot.val();
   });
 }

我为此使用了 firebase 函数。所以结果是登录到firebase日志中,但在执行函数时我没有得到并返回值。

【问题讨论】:

    标签: firebase asynchronous firebase-realtime-database google-cloud-functions


    【解决方案1】:

    两件事:

    • 使用 once() 而不是 on() 单次查询数据。 on() 建立一个永远监听的监听器,直到你移除监听器。

    • 实时数据库查询都是异步的,这意味着它们会立即返回,并且您提供的回调函数会在稍后调用结果。您不能简单地从回调中返回结果,以便从封闭函数中返回这些结果。如果您希望 verifyToken 向调用者产生查询结果,您应该返回一个使用数据解析的承诺。

    【讨论】:

      【解决方案2】:

      你可以从使用 Promise 开始。例如:

      function verifyToken(token) {
          return new Promise(resolve => {
              var androidId = 'xxxxx';
              admin.database(dbDEV).ref('profiles').orderByChild('androidId').equalTo(androidId).on('value',(snapshot)=>{
                  console.log(snapshot.val());
                  resolve(snapshot.val());
              });
          });
      }
      

      当你需要结果时:

      verifyToken(token).then(result => {
          ... do stuff
      });
      

      要改进这一点,您可以使用异步函数。例如:

      async function foo() {
          const result = await verifyToken(token);
          console.log(result);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 2017-08-09
        相关资源
        最近更新 更多