【问题标题】:Google Cloud Function sometimes works and sometimes not谷歌云功能有时有效,有时无效
【发布时间】:2019-11-02 10:44:25
【问题描述】:

我正在使用 Firestore 的 onCreate 函数来检测用户注册并使用他的用户 ID 创建文档。问题是该功能有时有效,有时无效。此外,每当函数运行时,我都会收到“函数返回未定义、预期的承诺或值”错误。我尝试了许多针对类似问题给出的解决方案,但仍然没有运气。

export const createNewUser = functions.auth.user().onCreate(user => {
  const userId = user.uid;

  const updateData = {
    ads_watched: 0,
    coins: 20000,
    gems: 0
  };

  admin.firestore().doc("cashon/" + userId)
  .set(updateData)
  .then(writeResult => {
      console.log("User Created result:", writeResult);
      return null;
  })
  .catch(err => {
      console.log(err);
      return null;
    });
});

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    需要返回set()异步方法返回的promise,如下:

    export const createNewUser = functions.auth.user().onCreate(user => {
      const userId = user.uid;
    
      const updateData = {
        ads_watched: 0,
        coins: 20000,
        gems: 0
      };
    
      return admin.firestore().doc("cashon/" + userId)
      .set(updateData)
      .then(() => {
          console.log("User Created result:", writeResult);
          return null;
      })
      .catch(err => {
          console.log(err);
          return null;
        });
    });
    

    正如“函数返回未定义的、预期的 Promise 或值”错误所示,您必须在后台触发的 Cloud Function 中返回 Promise 或值,以向平台指示 Cloud Function 已完成。由于您没有返回 Promise,因此您会遇到这种不一致的行为:有时 Cloud Function 在写入 Firestore 之前就被平台杀死了。

    我建议您观看 Doug Stevenson (https://firebase.google.com/docs/functions/video-series/) 的 Firebase 视频系列中关于“JavaScript Promises”的 3 个视频,这些视频解释了这一关键点。

    另外,请注意set() 方法返回一个Promise<void>。

    最后,请注意,如果您不需要console.log("User Created result:", writeResult);,您可以执行以下操作:

    export const createNewUser = functions.auth.user().onCreate(user => {
      const userId = user.uid;
    
      const updateData = {
        ads_watched: 0,
        coins: 20000,
        gems: 0
      };
    
      return admin.firestore().doc("cashon/" + userId)
      .set(updateData)
      .catch(err => {
          console.log(err);
          return null;
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2012-09-25
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      相关资源
      最近更新 更多