使用firebase读取nodejs promise

时间:2018-04-25 22:02:08

标签: node.js firebase firebase-realtime-database promise

我正在尝试使用nodejs从firebase读取值。我让阅读部分工作了。但是我无法获得要输出的值。

我对nodejs很陌生,我相信我在阅读承诺方面做错了。

这是我的代码

#index.js
var firebase = require('./firebase');

firebase.readValue(data => {
  console.log('--- output value')
  console.log(data);
})


#firebase.js
(function(){
    var admin = require('firebase-admin');
    var serviceAccount = require('./keys/<keyfile>');

    admin.initializeApp({
        credential: admin.credential.cert(serviceAccount),
        databaseURL: '<url>'
    });

    module.exports = {
        readValue: function(){
            var firebase = admin.database().ref("nemo/garage/status");
                firebase.once("value").then(function(snapshot){
                console.log("----------- reading from firebase...")
                console.log(snapshot.val())
                return snapshot;
            }, function(error){
               console.log('error')
            })
        }
    }
}());

当我node index.js时,我从index.js获得了----------- reading from firebase...但不是--- output value,它只是挂在那里。

enter image description here

我在阅读这个承诺时做错了什么?

我的节点版本是 - v8.10.0

1 个答案:

答案 0 :(得分:1)

那是因为once()是异步的并且立即返回。这会导致您的readValue立即返回,没有任何值。您传递给once()的函数将在稍后调用。

如果你想创建一个查询实时数据库的函数(或者用异步工作做任何事情),它应该返回一个promise,这样调用者就可以在它上面使用then()来获得结果。