【发布时间】:2018-09-20 22:03:51
【问题描述】:
目前我正在执行 firebase 查询并记录值,但是我想在函数之外操作我的值,这很棘手,因为 firebase 查询是异步的。 我想这样做是因为随着代码变得越来越复杂,将我的所有代码都嵌套在这个查询中会变得非常混乱。
目前: 我的数据库如下所示:
{
"test" : "Hello from my database!"
}
我的代码:
var config = {
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: ""
};
firebase.initializeApp(config);
database=firebase.database();
var ref = database.ref('test');
var firebaseMsg ='';
ref.on('value',function(snap){
firebaseMsg=snap.val();
console.log(firebaseMsg);
});
但是,我希望能够做这样的事情:
var firebaseMsg ='';
//attempting async/await
ref.on('value',async function(snap){
firebaseMsg= await snap.val();
});
//outside of the ref.on query
console.log(firebaseMsg);
因此,console.log(或我选择用于操作 firebaseMsg 的其他代码)不在我的 ref.on 查询范围内。
【问题讨论】:
-
ref.on中的回调被异步调用...只是因为您在其中等待不会使其同步运行 -
@JaromandaX 你知道我怎样才能让 ref.on 同步运行吗?
-
不,异步不能同步——异步回调的关键在于你不知道回调何时会被调用,因为它依赖于一些外部“事件”——使代码同步,你必须等待那个“事件”或者知道它什么时候会发生......javascript不能那样工作
-
由于
on()启动了一个连续监听器,它不会返回一个promise,因此它不能和async/await一起使用。见stackoverflow.com/questions/50495594/…
标签: javascript firebase firebase-realtime-database async-await