node.js - 使用 node.js 更新 Firebase - 我需要等待吗?

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

场景:

某些代码正在监听集合 A 的更改。当发生这种情况时,它会进行一些计算并更新集合 B。

A 变化之间的时间:20-50ms。 实际计算时间: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 中的更新按照我在代码中完成的顺序进行,或者我是否需要等待 在我可以继续下一次计算和更新之前完成每次更新?

更多详细信息:

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

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

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

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

最佳答案

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

如果您需要知道写入结果何时已完全提交到服务器,则需要注意 update() 返回的 Promise。只有在服务器上完成写入之后,而不是仅在本地进行更改时,该 promise 才会实现。

您对该 promise 使用 await 还是 then 并不重要。无论哪种方式,您都会知道更新的结果。

关于node.js - 使用 node.js 更新 Firebase - 我需要等待吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64161068/

相关文章:

Node.js、Synchronize.js 和返回值

javascript - Node.js 阻塞性质

ios - ld : framework not found after pod install

Python-Firebase多次打印

javascript - 分配给变量的基本 node.js 回调

node.js - 在 ubuntu 中使用一个命令列出所有全局安装的模块

android - setValue() 没有将数据保存到我的实时数据库

android - 不显示 DisplayName firebase Android?

swift - GeoFire 未快速显示进入的区域

java - Firebase 聊天应用程序 : query messages, 优化应为 OR 的查询,或改进 NoSQL 数据库结构