【问题标题】:Firebase updating with node.js - do I need to await?使用 node.js 更新 Firebase - 我需要等待吗?
【发布时间】:2020-10-02 03:14:16
【问题描述】:

场景:

一些代码正在侦听集合 A 的更改。当一个发生时,它会进行一些计算并更新集合 B。

A 变化之间的时间:20-50 毫秒。 实际计算时间:20-30ms。 往返发送更新到 Firebase 的时间:250-300 毫秒。

所以代码是这样的:

const runUpdates = async (snapshot) => {
  const inputData = snapshot && snapshot.exists() && snapshot.val() || undefined
  if (inputData) {
    const calculatedData = calculateStuff(inputData)
    await firebase.database().ref().update({ 'collectionB': calculatedData })
  }
}

firebase.database().ref('collectionA').on('value', runUpdates)

我正在使用 Firebase 实时数据库。

实际问题:

firebase 包(使用本地缓存或任何其他必要的手段)是否确保更新将按照我在代码中完成的顺序在 firebase 中完成,或者我是否需要 await 进行每次更新在我可以继续进行下一次计算和更新之前完成?

更多详情:

对于触发事件但计算/更新尚未完成的情况,有一种机制。我完全忽略了这一点或清晰度。

我正在尝试改进这段代码,似乎很多情况下计算时间比较短,但是我需要等待firebase的响应才能开始下一次计算。

有人告诉我,firebase 有一个本地缓存(服务器端),我的 firebase update 命令实际上会在本地更新该缓存(因此是“立即的”),然后将更改传播到 firebase 本身。任何顺序更新也将被传播,同时保证顺序。

(不用说,我尝试在文档等中四处寻找此信息)

【问题讨论】:

  • 您使用的是哪个 Firebase 产品(实时数据库?Firestore?)?如果您展示更多实际与所述产品一起使用的代码,并解释您正在使用的一系列调用的具体行为,这也可能会有所帮助。
  • @DougStevenson - 我正在使用实时数据库(也在问题中添加)。关于实际代码,我将尝试更好地解释发生了什么。谢谢

标签: node.js firebase firebase-realtime-database backend


【解决方案1】:

对实时数据库的查询通过单个套接字连接进行管道传输。结果将按照发出查询的顺序传递。

如果你想知道write的结果什么时候已经完全提交到服务器,你需要注意update()返回的promise。只有在服务器上完成写入后,该承诺才会兑现,而不是仅在本地可用时才兑现。

您是否在该承诺上使用awaitthen 并不重要。无论哪种方式,您都会知道更新的结果。

【讨论】:

  • 谢谢!你知道我在哪里可以找到这方面的相关文档吗?
  • 您是否有理由不等待 update 操作?
  • @Eitank 我的意见是你应该从相反的方向考虑它。如果你打算用它做某事,只编写代码来关注 Promise 的结果。如果您不需要结果,那么添加额外的代码是没有帮助的,并且可能会使该代码的读者感到困惑。
  • @DougStevenson 所以基本上如果我除了记录它失败之外什么都不做,那么我不应该等待更新的承诺吗?如果我明白你的回答。
  • @Eitank 对于所有返回承诺的函数都是一样的。不要编写不必要的代码。仅当您有特定原因时才使用 await。
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 2020-10-17
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多