我正在尝试使用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
,它只是挂在那里。
我在阅读这个承诺时做错了什么?
我的节点版本是 - v8.10.0
答案 0 :(得分:1)
那是因为once()
是异步的并且立即返回。这会导致您的readValue
立即返回,没有任何值。您传递给once()
的函数将在稍后调用。
如果你想创建一个查询实时数据库的函数(或者用异步工作做任何事情),它应该返回一个promise,这样调用者就可以在它上面使用then()
来获得结果。