使用 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 中运行查询的主要内容,如果未能解决你的问题,请参考以下文章