场景:
某些代码正在监听集合 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/