如何在Higher-Order函數中定義正確的返回類型

我使用的是Next.js、Auth.js和mongoose,我的問題是我想用一個名為withDBConnection的包裝器/輔助函數包裝所有控制器,以節省我的時間。如果不是每次都與數據庫建立連接,它會獲取控制器并在連接后返回:

type Controller <Args extends any[]> = (...args: Args) => any;
export const withDBConnection = <Args extends any[]> (Controller:Controller<Args>):(...args:Args) => Promise<any> => {
    return async (...args: Args) => {
    try {
      await dbStartConnection();
      Controller(...args);
    } catch (error) {
      console.log("inside withDBConnection catch block");
      console.log((error as AppError).message);
    }
  };}

使用輔助函數的示例:

export const getUser = withDBConnection( async(email: string) => {
  const user = await Auth.find({discordEmail: email});
  console.log("getUser", user);
  return user;
});

但是控制器沒有返回值user,我不能在Auth.js signIn()回調中使用它:

const isExist = await getUser(user.email);

isExist總是undefined,所以應用程序會轉到createNewUser控制器:

if(!isExist) await createNewUser(user);

我試圖在type ControllerwithDBConnection中將返回類型從any更改為mongoose類型Document,但這讓ts抱怨email: string

? 最佳回答:

主要問題是Controller(...args);調用時不返回結果,導致包裝函數返回undefined。以下代碼正確等待并返回控制器的結果

type Controller<Args extends any[]> = (...args: Args) => Promise<any>;

export const withDBConnection = <Args extends any[]>(
  Controller: Controller<Args>
): ((...args: Args) => Promise<any>) => {
  return async (...args: Args) => {
    try {
      await dbStartConnection();
      return await Controller(...args); 
    } catch (error) {
      console.log("inside withDBConnection catch block");
      console.log((error as AppError).message);
      throw error; 
    }
  };
};
主站蜘蛛池模板: 精品免费国产一区二区三区 | 国产一区二区精品在线观看| 国产精品99精品一区二区三区 | 亚洲乱码日产一区三区| 天堂一区二区三区在线观看| 日本在线不卡一区| 精品免费AV一区二区三区| 少妇特黄A一区二区三区| 国产精品一区二区av| 国产观看精品一区二区三区 | 高清一区二区三区| 精品成人一区二区三区免费视频| 亚洲综合一区二区精品导航| 红桃AV一区二区三区在线无码AV | 麻豆AV天堂一区二区香蕉| 午夜福利av无码一区二区 | 韩国一区二区视频| 在线中文字幕一区| 欧洲无码一区二区三区在线观看| 国产福利精品一区二区| 日本一区二区免费看| 日韩在线不卡免费视频一区| 国产suv精品一区二区33| 久久精品一区二区东京热| 国产AV一区二区三区传媒| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 国产在线精品一区二区| 精品国产亚洲一区二区三区在线观看 | 亚洲欧美日韩一区二区三区| 成人区精品一区二区不卡亚洲| 91午夜精品亚洲一区二区三区 | 久久se精品一区二区影院| 国产福利一区二区| 无码人妻AⅤ一区二区三区水密桃 无码欧精品亚洲日韩一区夜夜嗨 无码毛片一区二区三区中文字幕 无码毛片一区二区三区视频免费播放 | 内射少妇一区27P| 亚洲一区精品伊人久久伊人| 无码人妻久久一区二区三区蜜桃 | 任你躁国语自产一区在| 在线日产精品一区| 免费人妻精品一区二区三区| 日本一区二区在线不卡|