gpt4 book ai didi

firebase - Firebase 的 Cloud Functions 被多次调用

转载 作者:行者123 更新时间:2023-12-02 04:07:58 25 4
gpt4 key购买 nike

我只是尝试 Firebase 的 Cloud Functions,以便将我的 firebase-queue 工作线程转移到云函数。我添加了一个简单的函数,每当我在给定的引用处创建新节点时,都会添加最后更新的时间戳。该函数如下所示:

var functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.setLastUpdatedTimestamp = functions.database.ref('/nodes/{nodeId}')
.onWrite(event => {
const original = event.data.val();
console.log('Adding lastUpdatedTimestamp to node ', original.name);
return event.data.ref.child('lastUpdatedAtFromFC').set(Date.now());
});

我部署了这一云功能,并从我的应用程序中仅添加了一个节点。我进入 Firebase Functions 仪表板,看到该函数已被调用 169 次,但我不知道为什么。当我查看日志时,我看到类似将函数附加到所有过去节点的日志。

onWrite 的行为是否会类似于 child_added 并为所有现有实体运行该函数?

每次我更改并再次部署该功能时是否都会重复此操作?

我希望它只为新添加的节点运行一次。

最佳答案

这是编写处理数据库写入的函数时的常见错误。当您在某个位置处理初始写入的事件,然后对同一位置进行第二次写操作时,第二次写入将触发另一个事件,该事件将再次运行该函数,依此类推,这将是一个无限循环。

您的函数中需要一些逻辑来确定第二个写入事件是否不应重新写入数据库。这将停止循环。就您而言,您不需要设置上次更新时间的函数。您可以在客户端上使用特殊值来告诉服务器将当前时间插入到字段中。

https://firebase.google.com/docs/reference/js/firebase.database.ServerValue#.TIMESTAMP

关于firebase - Firebase 的 Cloud Functions 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835339/

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