exports.addNewValue = functions.database.ref('/path')
.onWrite(event => {
    event.data.adminRef.update({"timeSnapshot":Date.now()})})

看来 Date.now() 在函数中导致无限循环,因为以下不会:
exports.addNewValue = functions.database.ref('/path')
.onWrite(event => {
    event.data.adminRef.update({"timeSnapshot":"newString"})})

我该如何解决?

最佳答案

如果您写回数据库中先前更改的同一位置,您可以预期以下事件序列:

  • 函数在客户端
  • 的第一次更改时触发
  • 函数写回数据库
  • 函数第二次触发,因为在步骤 #2 期间写入

  • 所有与过滤器路径匹配的数据库写入,即使是来自同一函数内的写入,都将触发该函数。

    在步骤 3 中,您需要一种策略来确定第二次函数调用是否会导致再次写回数据库。如果它不需要另一次写入,则该函数应提前返回,以免触发另一次写入。通常,您会查看传递给函数的事件中的数据,并确定它是否已在第一次修改。这可能涉及查看数据库中是否设置了某些标志,或者您修改的数据是否不需要更多更改。

    Firebase 团队提供的许多 code samples 都是这样做的。特别是,看看 text moderation 。此外,还有一个 video that describes the problem 和一个可能的解决方案。最后,您有责任提出满足您需求的策略。

    关于javascript - Cloud Function 陷入无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44865161/

    10-12 20:10