使用 async / await 在 firebase 中运行查询

Posted

技术标签:

【中文标题】使用 async / await 在 firebase 中运行查询【英文标题】:running queries in firebase using async / await 【发布时间】:2017-09-28 11:48:00 【问题描述】:

感谢 firebase 有 added support for promises,有没有办法在 async 函数内运行如下查询?:

const eventref = this.db.ref('cats/whiskers');
const value = await eventref.once('value')

运行上面的代码返回一个value的承诺,我希望得到存储在cats/whiskers的json blob。

【问题讨论】:

是的,为什么不可能呢?你试过了吗?你有问题吗? 如前所述,上面返回的是一个承诺而不是一个值。 嗯,这应该是不可能的,await 不能返回 thenables。你使用转译器吗?你检查过eventref.once('value') 在调试器中的样子吗? 为我工作:runkit.com/5906914d3ff14f0012d0307e/590691ab301f4d0012938bc5 是的,出于某种原因,我在 await 语句中坚持使用 .val() 调用,这也对我有用。 【参考方案1】:

value 的结果是一个快照,我们需要多 1 步才能得到值。这应该是这样的:

const eventref = this.db.ref('cats/whiskers');
const snapshot = await eventref.once('value');
const value = snapshot.val();

【讨论】:

完全救了我! 如果您之后需要使用该值怎么办,这会告诉您的代码等待value 被分配一些东西,然后再继续吗? @Badrush 供您参考firebase.google.com/docs/reference/js/… @Badrush value 事件可用于使用 once 检索数据库中特定节点的当前值,或者可用于使用 @ 订阅数据库中特定节点上的更改987654327@. @Badrush 你可以使用 await: var A = await eventref.once('value'); 因为你所说的正是await 所做的。

以上是关于使用 async / await 在 firebase 中运行查询的主要内容,如果未能解决你的问题,请参考以下文章

.NET Web应用中为什么要使用async/await异步编程

JS async和await关键字

async/await使用深入详解

async和await

async和await

如何测试使用 async/await 的方法?