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

有人可以解释如何使用Firebase的承诺与我的代码如下:

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(); 在我呼叫我的下一个function之前。 什么是正确的方式去呢? 我显然不理解承诺。 我试图按照这个教程。

承诺直接内置到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已经覆盖,所以您不需要创build容器承诺。 🙂