提问者:小点点

Await返回[Function]而不是value


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;
  });
}

返回未定义

应从查询中返回名称。


共1个答案

匿名用户

on用于侦听所有触发的事件。因此,它不会返回一个承诺,因为一个承诺表示一个可用的值,并且由于它不会返回一个承诺,所以您不能await它(或者至少:这样做没有意义,这是一个no-op)。

如果您想等待第一次发生,则有once,它还返回一个可以为awaited的承诺。

关于UnhandledPromiseRejection:您应该始终将异步代码包装到try/catch中(在Async Function中),或者将.catch附加到链中最上面的Promission中,然后您就可以正确处理这些错误。