Firebase将收到的数据分配给变量

时间:2018-02-12 19:52:00

标签: javascript firebase web firebase-realtime-database

我正在开发一个网络应用程序,之前发现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侦听器在调用时不会执行查询。我查看了文档,但是我没有找到任何可以帮助我解决这个问题的内容。

1 个答案:

答案 0 :(得分:0)

获取数据的Firebase SDK API都是异步的。 once()方法是异步的,这意味着它会在另一个线程实际执行提取时立即返回。它返回一个在工作完成时解析的promise。你无法改变它的工作方式 - 你必须使用异步编程技术。在异步工作完成之前,您可以预期在调用once()之后的下一行代码将立即执行。

您需要做的是将处理快照的代码完全放在回调中。或者,您可以使用返回的promise来触发某些代码,这也是对函数的回调。这些是您唯一的选择。