Await 返回 [Function] 而不是值
Posted
技术标签:
【中文标题】Await 返回 [Function] 而不是值【英文标题】:Await returns [Function] instead of value 【发布时间】:2019-11-23 08:40:00 【问题描述】:await 返回 [Function] 而不是值
尝试通过使用 async 和 await 函数从 firebase 返回查询的值。返回的结果是 [Function] 或未处理的承诺拒绝警告。 Promise、async 和 await 的新手,但我已经在几个网站上尝试了基本示例,大多数都有 resolve 和 reject 参数,我认为它们应该与 firebase 的 Promise 相同。
我尝试了 2 个不同的版本,但结果都不正确。
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;
);
返回未定义
期望其中之一从查询中返回名称。
【问题讨论】:
Firebase 文档是否说on
返回了一个承诺?根据函数名,返回似乎不太可能......
【参考方案1】:
on
用于监听所有被触发的事件。因此它不返回 Promise,因为 Promise 代表一个可用的值,并且由于它不返回 Promise,所以您不能 await
它(或者至少:这样做没有意义,它是无操作的)。
如果你想等待第一次出现,有once
,它也返回一个可以是await
ed的promise。
关于 UnhandledPromiseRejection:您应该始终将异步代码包装到 try / catch
(在 async function
内),或将 .catch
附加到链中最上面的 Promise,然后您可以正确处理这些错误。
【讨论】:
感谢乔纳斯。抱歉,我并不清楚“在”什么,并认为这是一个承诺。我怀疑这是一个承诺,因为返回的值是未定义的,我不得不“等待”结果出现。一次确实返回第一次出现,但如果我想要查询中的所有数据怎么办? 那么Firebase文档中可能有更合适的方法......以上是关于Await 返回 [Function] 而不是值的主要内容,如果未能解决你的问题,请参考以下文章
使用 async/await 时,Firebase Cloud Firestore 查询返回 Promise <pending> 而不是已完成