【发布时间】: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