我会在特定时间触发Firebase的Cloud功能。正确触发此功能。
当函数仍然必须执行时,在我的场景中,函数将写入的数据可能会被删除。
删除数据后,会创建一个包含.update()
数据的新路径。
我该如何避免这种行为?是否有一些函数可以调用来停止某个函数?
以下是我的代码示例。 现在的情况是两个功能:
exports.getFacebookLongLivedAccessToken = functions.database.ref('/users/{uid}/...').onWrite(event => { const accessToken = event.data; if(event.data.val() !== null) { const baseFBUrl = "https://graph.facebook.com/oauth/access_token?client_id=...&client_secret=...&grant_type=fb_exchange_token&fb_exchange_token=" const fbAccessTokenUrl = baseFBUrl + accessToken.val(); axios.get(fbAccessTokenUrl) .then(function (response) { return accessToken.ref.parent.update({accessTokenLongLived: response.data.access_token}); }) .catch(function (error) { console.error(error); return accessToken.ref.parent.update({accessTokenLongLived: error + ' - ' + fbAccessTokenUrl}); }); } else { return; } });
我提到的第二个功能是用户删除,如下所示:
exports.cleanupUserData = functions.auth.user().onDelete(event => {
const uid = event.data.uid;
console.error(uid)
console.error(event.data)
return admin.database().ref('/users/' + uid).remove();
//return uid.ref.parent.remove(uid);
});
我知道;登录的变化和之后的删除不是很大,但我倾向于制作更多的功能并获得更多的使用等等。所以对我而言,了解并做到这一点非常重要。
答案 0 :(得分:0)
我认为你在这里遇到的是你的云功能的竞争条件。
基本上在一个地方或另一个地方你需要做
a)原子数据库写入OR
b)检查更新标志,不执行更新。
请查看此链接https://youtu.be/7E13ZBCyKT0?t=5m
视频中的5分钟Jen Person解释了如何确保更新不会被触发到数据库并陷入无限循环。
如果您分享了一些代码,我们可能都能够进一步提供帮助。