Firebase 在 Promise 触发前等待加载数据库数据
Posted
技术标签:
【中文标题】Firebase 在 Promise 触发前等待加载数据库数据【英文标题】:Firebase waiting to load database data before promise fires 【发布时间】:2017-07-20 03:27:07 【问题描述】:有人可以用我的代码解释如何在 Firebase 中使用 Promise:
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 教程。
【问题讨论】:
查看您的代码,这是您需要重温的firebase!忽略promise代码,其余代码看起来完全错误 我的意思是,您的var p
可以简单地是var p = db.ref("/").once("value");
- 因为once
返回一个承诺! ...然后是p.then(function(result) ... do something with the result ...)
【参考方案1】:
Promises 直接内置在 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);
);
第 3 版的 firebase 已为您服务,因此您无需创建容器承诺。 :)
【讨论】:
以上是关于Firebase 在 Promise 触发前等待加载数据库数据的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 云函数错误:函数返回未定义、预期的 Promise 或值