gpt4 book ai didi

node.js - 如何处理 Firebase Cloud Functions 无限循环?

转载 作者:行者123 更新时间:2023-12-05 03:41:19 27 4
gpt4 key购买 nike

我有一个 Firebase 云函数,它由 Firebase 实时数据库中某些数据的更新触发。当数据更新时,我想读取数据,对该数据进行一些计算,然后将计算结果存回实时数据库。它看起来像这样:

exports.onUpdate = functions.database.ref("/some/path").onUpdate((change) => {
const values = change.after.val();
const newValues = performCalculations(value);
return change.after.ref.update(newValues);
});

我担心的是这可能会造成无限循环的更新。我在 Cloud Firestore Triggers 上看到了一条注释上面写着:

"Any time you write to the same document that triggered a function,you are at risk of creating an infinite loop. Use caution and ensurethat you safely exit the function when no change is needed."

所以我的第一个问题是:同样的问题是否适用于 Firebase 实时数据库?

如果是这样,防止无限循环的最佳方法是什么?我应该比较之前/之后的快照、键/值对等吗?

到目前为止我的想法:

exports.onUpdate = functions.database.ref("/some/path").onUpdate((change) => {

// Get old values
const beforeValues = change.before.val();

// Get current values
const afterValues = change.after.val();

// Something like this???
if (beforeValues === afterValues) return null;

const newValues = performCalculations(afterValues);
return change.after.ref.update(newValues);
});

谢谢

最佳答案

Does this same problem apply to the Firebase Realtime Database?

是的,无论使用何种触发器类型,只要您回写到触发 Cloud Function 运行的同一位置,就有可能发生无限循环。

要防止无限循环,您必须在代码中检测它的条件。您可以:

  • 在处理后通过向其中写入一个值来标记 Node/文档,并在 Cloud Function 的开头检查该标记。
  • 或者你可以检测Cloud Functions代码是否对数据做了有效的修改/改进,没有修改/改进时不写回数据库。

这些都可以,使用哪个取决于您的用例。您的 if (beforeValues === afterValues) return null 是第二种方法的一种形式,确实可以工作 - 但这取决于您尚未共享的数据的详细信息。

关于node.js - 如何处理 Firebase Cloud Functions 无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67826093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com