簡體   English   中英

Firebase Cloud Functions - 如何在 multiple.then() 方法中使用相同的返回值

[英]Firebase Cloud Functions - How to use same return value in multiple .then() methods

我正在嘗試使用 Firebase 雲 Function 執行以下操作,使用 Firebase Admin SDK:

  1. 使用電子郵件/密碼創建用戶。
  2. 創建一個 Firestore 文檔,並引用新創建的 UID。
  3. 如果 1 和 2 成功,則向客戶端返回 Firebase JWT 令牌。

我到目前為止的代碼如下:

exports.createUser = functions.https.onCall((data, context) => {
    return admin
      .auth()
      .createUser({
        email: data.email,
        password: data.password,
        phoneNumber: data.number,
      })
      .then((user) => {
        return admin
          .firestore()
          .collection("collectionName")
          .doc(user.uid)
          .set({});
      })
      .catch((error) => {
        console.log("Error creating new user:", error);
      });
  });

我正在努力解決的是鏈中的下一個.then() ,以返回 JWT 令牌。 我知道實際的 Admin SDK 代碼返回 JWT,但我不確定如何在多個.then()中訪問新用戶的屬性,同時還返回 promise(我認為這是正確的必要條件function 終止?)

如何添加另一個有權訪問user.uid的 .then .then()並確保 function 實例不會過早終止?

您可以簡單地使用一個變量,如下所示:

exports.createUser = functions.https.onCall((data, context) => {

    let userObject;

    return admin
      .auth()
      .createUser({
        email: data.email,
        password: data.password,
        phoneNumber: data.number,
      })
      .then((user) => {
        userObject = user
        return admin
          .firestore()
          .collection("collectionName")
          .doc(user.uid)
          .set({});
      })
      .then(() => {
        const user = userObject;
        // Do whathever you want with user
        await function(user)
        
        // Don't forget to return data that can be JSON encoded, see the doc: https://firebase.google.com/docs/functions/callable#sending_back_the_result
        // In your case the JWT Object I guess
        return ...
      })
      .catch((error) => {
        console.log("Error creating new user:", error);
        // See the doc: https://firebase.google.com/docs/functions/callable#handle_errors
      });
  });

如果你使用async/await就更簡單了:

exports.createUser = functions.https.onCall(async (data, context) => {

    const user = await admin
      .auth()
      .createUser({
        email: data.email,
        password: data.password,
        phoneNumber: data.number,
      });

    await admin
          .firestore()
          .collection("collectionName")
          .doc(user.uid)
          .set({}); 

    // Do whathever you want with user
    await function(user)

    return ...

  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM