【问题标题】:Reading a nodejs promise with firebase使用 firebase 读取 nodejs 承诺
【发布时间】:2018-10-06 12:03:03
【问题描述】:

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

我对 nodejs 很陌生,我相信我在阅读 Promise 时做错了。

这是我的代码

#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 时,我得到----------- reading from firebase...,但没有从index.js 得到--- output value,它就挂在那里。

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

我的节点版本是-v8.10.0

【问题讨论】:

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


    【解决方案1】:

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

    如果你想创建一个查询实时数据库的函数(或做任何异步工作),它应该返回一个承诺,以便调用者可以在它准备好时对其使用then() 来获取结果。

    【讨论】:

    • 感谢@Doug 的回答,这是否意味着我需要将readValue 函数转换为Promise ?
    • 我不知道你所说的“转换”是什么意思。如果它返回一个 Promise 将是最简单的,以便调用者可以决定如何等待工作完成。
    • 谢谢,我想我对如何返回承诺有点困惑,(我在两天前开始使用节点,我可能在这里遗漏了一件简单的事情)。你能给我一个代码示例或一个链接让我看看吗,干杯
    • once() 返回一个承诺。你可以回报那个承诺。
    • 啊,我明白了,谢谢。将尽快尝试:),再次感谢您的帮助
    猜你喜欢
    • 2019-03-19
    • 2017-02-25
    • 2015-03-30
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2019-09-29
    相关资源
    最近更新 更多