第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的嵌套承諾會返回未定義的?

為什么我的嵌套承諾會返回未定義的?

天涯盡頭無女友 2022-09-29 15:47:02
這是我的代碼:resolve: async (        _root,        { data: { password, interests, email, ...userData } },        { prisma }      ) => {        console.log('called reg');        const handleError = (error) => {          console.log('error: ', error);          return { token: null, error, userId: null };        };        return admin          .auth()          .createUser({            email,            password,            displayName: `${userData.firstName} ${userData.lastName}`,          })          .then((userRecord) => {            // See the UserRecord reference doc for the contents of userRecord.            console.log('Successfully created new user:', userRecord);            return admin              .database()              .ref('users/' + userRecord.uid)              .set(                {                  ...userData,                  interests,                },                (error) => {                  if (error) return handleError(error);                  else {                    return admin                      .auth()                      .createCustomToken(userRecord.uid)                      .then((token) => {                        console.log('token: ', token)                        return {                          token,                          error: null,                          userId: userRecord.uid,                        };                      }, handleError);                  }                }              );          }, handleError)          .then((result) => {            console.log('result: ', result);            return result;          });      },我在我的 graphql 解析器中使用嵌套,我的問題是,為什么最后一個結果然后返回未定義?我無法弄清楚,因為當我登錄createCustomToken的回調時,令牌就在那里,所以我確保最終記錄結果,但不幸的是,它是未定義的,基本上,我想使用.then并像這樣捕獲,而不是asyc /await,幫助?
查看完整描述

1 回答

?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

不應在方法中使用回調,而應將 a 鏈接到該方法。使用回調時,該方法將返回隨后在最后一個塊中分配給的回調?;鸹臋nsetthensetundefinedresultthen


此外,您不必在每個方法中都提供相同的參數(shù)。您可以通過在最后鏈接方法來替換它們。handleErrorthencatch


...

return admin

  .database()

  .ref("users/" + userRecord.uid)

  .set({

    ...userData,

    interests,

  })

  .then(() => admin.auth().createCustomToken(userRecord.uid))

  .then((token) => {

    console.log("token: ", token);

    return {

      token,

      error: null,

      userId: userRecord.uid,

    };

  })

  .then((result) => {

    console.log("result: ", result);

    return result;

  }).catch(handleError);

在我看來,你的代碼很難閱讀。編寫更具可讀性的代碼將使調試過程更容易,通常,異步/等待可以提高可讀性。


async/await您的代碼版本:


async (

  _root,

  { data: { password, interests, email, ...userData } },

  { prisma }

) => {

  try {

    const userRecord = await admin.auth().createUser({

      email,

      password,

      displayName: `${userData.firstName} ${userData.lastName}`,

    });

    console.log("Successfully created new user:", userRecord);

    await admin

      .database()

      .ref("users/" + userRecord.uid)

      .set({

        ...userData,

        interests,

      });

    const token = await admin.auth().createCustomToken(userRecord.uid);

    console.log("token: ", token);

    return {

      token,

      error: null,

      userId: userRecord.uid,

    };

  } catch (error) {

    console.log("error: ", error);

    return { token: null, error, userId: null };

  }

};

當然,可讀性是主觀的。選擇一種你和你的隊友喜歡的風格。


查看完整回答
反對 回復 2022-09-29
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號