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"})})
我该如何解决?
最佳答案
如果您写回数据库中先前更改的同一位置,您可以预期以下事件序列:
所有与过滤器路径匹配的数据库写入,即使是来自同一函数内的写入,都将触发该函数。
在步骤 3 中,您需要一种策略来确定第二次函数调用是否会导致再次写回数据库。如果它不需要另一次写入,则该函数应提前返回,以免触发另一次写入。通常,您会查看传递给函数的事件中的数据,并确定它是否已在第一次修改。这可能涉及查看数据库中是否设置了某些标志,或者您修改的数据是否不需要更多更改。
Firebase 团队提供的许多 code samples 都是这样做的。特别是,看看 text moderation 。此外,还有一个 video that describes the problem 和一个可能的解决方案。最后,您有责任提出满足您需求的策略。
关于javascript - Cloud Function 陷入无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44865161/