firebase - 如何取消正在进行的云功能?

标签 firebase google-cloud-functions

我在特定时间触发 Firebase 的云函数。该函数已正确触发。

当函数仍然需要执行时,在我的场景中,函数将写入的数据可能会被删除 main while。

因此,删除数据后,会创建一个包含 .update() 数据的新路径。

我怎样才能避免这种行为?是否有一些函数可以调用来停止某个函数?

这是我的代码示例。 现在的情况是关于两个函数:

  1. 获取 Facebook 长期 token ,该 token 在用户首次登录时触发,然后 Firebse 才会提供 Facebook 访问 token :( 它看起来像:
        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;
      }
    });
  1. The second function I mentioned about, is a user deletion, this looks like:

    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);
    });
    

我知道;登录后删除的变化并不大,但我倾向于做更多的功能和更多的使用等等。因此对我来说,理解并正确对待这一点很重要。

最佳答案

我认为您在这里可能遇到的是云函数的竞争条件。

基本上,在一个地方或另一个地方,您需要执行以下任一操作

a) 原子数据库写入或

b) 检查更新标志并且不执行更新。

看看这个链接 https://youtu.be/7E13ZBCyKT0?t=5m

视频播放 5 分钟 Jen Person解释如何确保更新不会触发数据库并陷入无限循环。

如果您分享一些代码,我们也许能够提供进一步的帮助。

关于firebase - 如何取消正在进行的云功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504777/

相关文章:

javascript - 在循环中收集 Firebase 云函数异步调用的结果

swift - 如何在另一个 UIViewController 中显示使用 Google Sign In 和 Firebase 登录的用户名

firebase - 未定义类 'FirebaseUser'

git - 尝试部署到 github 分支上的 firebase

firebase - campaign_details 事件未记录在 firebase 中

java - Cloud Firestore - 无法获取文档计数

swift - 从一个信号触发的 firebase 云功能发送 voip 推送通知

Firebase:如何使用 Cloud Functions shell 在本地运行 'HTTPS callable functions'?

javascript - Firebase云功能1.0,当前用户没有身份验证信息

git - 云函数从私有(private) git repo 安装包