Чтение обещания nodejs с помощью firebase - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь прочитать значение из firebase, используя nodejs.Я получил работу по чтению.Однако я не могу получить значение для вывода.

Я довольно плохо знаком с 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, я получаю ----------- reading from firebase..., но не --- output value из index.js, и он просто там висит.

enter image description here

Что я делаю не так, читая это обещание?

версия моего узла - v8.10.0

1 Ответ

0 голосов
/ 26 апреля 2018

Это потому, что once() является асинхронным и возвращается немедленно.Это заставляет ваш readValue немедленно возвращаться без значения.Функция, которую вы передали once(), будет вызвана через некоторое время.

Если вы хотите создать функцию, которая запрашивает базу данных реального времени (или выполняет какие-либо операции с асинхронной работой), она должна вернуть обещание, чтобы вызывающая сторонаможете использовать then() для получения результата, когда он будет готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...