我正在开发一个网络应用程序,之前发现Firebase没有让我做这样的事情,但能够找到解决方法,但如果我能像以下那样获得操作方式我会更容易希望他们:
var testString='asdf';
firebase.database().ref('testing').once('value', function (snapshot) {
testString=snapshot.val();
console.log('Data val: ' + snapshot.val());
});
console.log('Val after: ' + testString);
运行时,这会给我控制台输出:
Val after: asdf
Data val: testval
而不是我期望的那样:
Data val: testval
Val after: asdf
看起来Firebase侦听器在调用时不会执行查询。我查看了文档,但是我没有找到任何可以帮助我解决这个问题的内容。
答案 0 :(得分:0)
获取数据的Firebase SDK API都是异步的。 once()方法是异步的,这意味着它会在另一个线程实际执行提取时立即返回。它返回一个在工作完成时解析的promise。你无法改变它的工作方式 - 你必须使用异步编程技术。在异步工作完成之前,您可以预期在调用once()之后的下一行代码将立即执行。
您需要做的是将处理快照的代码完全放在回调中。或者,您可以使用返回的promise来触发某些代码,这也是对函数的回调。这些是您唯一的选择。