await返回[Function]而不是value
尝试使用async和await函数从firebase返回查询的值。返回的结果是[Function]或未处理的承诺拒绝警告。async和await是新的承诺,但我在几个网站上尝试了基本的示例,大多数都有resolve和reject参数,我认为这应该与firebase的承诺相同。
我试了两个不同版本,结果都不正确。
get_all_users:async function(){
ref = db.ref("/user_data");
const value = await ref.orderByKey().on("child_added", function(data){});
console.log(value.val().name);
}
返回UnhandledPromiseRejectionWarning
function get_async_users(){
ref = db.ref("/user_data");
ref.orderByKey().on("child_added", function(data) {
return data.val().name;
});
}
返回未定义
应从查询中返回名称。
on
用于侦听所有触发的事件。因此,它不会返回一个承诺,因为一个承诺表示一个可用的值,并且由于它不会返回一个承诺,所以您不能await
它(或者至少:这样做没有意义,这是一个no-op)。
如果您想等待第一次发生,则有once
,它还返回一个可以为await
ed的承诺。
关于UnhandledPromiseRejection:您应该始终将异步代码包装到try/catch
中(在Async Function
中),或者将.catch
附加到链中最上面的Promission中,然后您就可以正确处理这些错误。