Firebase等待在承诺触发之前加载数据库数据

时间:2017-03-01 00:01:49

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

有人可以通过我的代码解释如何在Firebase中使用promises:

        var p = new Promise(function(resolve, reject) {
            var data=null;

            var ref = db.ref("/");
            ref.once("value", function(snapshot) {
                data = snapshot.val();

            });

            data.onload = function() {
                console.log(data+" onload");

                if (data!=null) {
                    resolve('Success!');
                }
                else {
                    reject('Failure!');
                    console.log('failed');
                }

            }

        });

        p.then(function() { 
            /* do something with the result */
            console.log(data+" done");
        }).catch(function() {
            /* error :( */
            console.log("error");
        });

我想等到我在调用下一个函数之前'data = snapshot.val();'回复'。这是怎样的正确方法?我显然不理解承诺。我正在尝试关注this教程。

1 个答案:

答案 0 :(得分:2)

Promise直接内置在firebase中。

var ref = firebase.database().ref();

ref.once('value')
  .then(function (result) {
    // This only happens after the data has been returned
    console.log(result.val());
  })
  .catch(function (err) {
    // This is where errors land
    console.log('Error', err.code);
  });

firebase的第3版已经涵盖了您,因此您无需创建容器承诺。 :)