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

Firebase waiting to load database data before promise fires

有人可以用我下面的代码解释如何在 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(); 'hear back' 开始调用我的下一个函数。解决这个问题的正确方法是什么?我显然不理解承诺。我正在尝试遵循 this 教程。

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 版已涵盖,因此您无需创建容器承诺。 :)