【问题标题】:Dynamic function call from dynamic string using nodejs使用nodejs从动态字符串调用动态函数
【发布时间】:2021-11-17 16:01:35
【问题描述】:

我正在使用 express nodejs,在我的项目中,在处理特定模块时发生了一种情况。我为不同的角色做了不同的函数,所以根据登录用户的角色,动态调用其他函数。我想要一个技巧,即代码应该是最少的行。所以请给我一个好的解决方案。

if (userRole.code === ROLE.REFERRINGPROVIDER) {
  query = await referralUser(tabCode, userId, query);
} else if (userRole.code === ROLE.CONSULTINGPROVIDER) {
  query = await consultingUser(tabCode, userId, query);
} else if (userRole.code === ROLE.PARENT) {
  query = await parentUser(tabCode, userId, query);
} else if (userRole.code === ROLE.PHYSICIAN) {
  query = await physicianUser(tabCode, userId, query);
}

如上例所示,我必须为不同的用户编写该代码,所以我必须使其成为一个简单的单行函数。

【问题讨论】:

    标签: node.js express node-modules


    【解决方案1】:

    您可以通过字符串名称调用函数。例如:

    function funcOne() {
      console.log('funcOne');
    }
    
    function funcTwo() {
      console.log('funcTwo');
    }
    
    function funcThree() {
      console.log('funcThree');
    }
    
    function funcFour() {
      console.log('funcFour');
    }
    
    function funcFive() {
      console.log('funcFive');
    }
    
    const func: { [K: string]: Function } = {
      funcOne,
      funcTwo,
      funcThree,
      funcFour,
      funcFive
    };
    
    // console log output: "funcOne"
    func['funcOne']();
    
    // console log output: "funcFour"
    func['funcFour']();
    
    // console log output: "funcTwo"
    func['funcTwo']();
    

    在您的情况下,使用 ROLE 将其键映射到函数:

    const func: { [K: string]: Function } = {
      [ROLE.REFERRINGPROVIDER]: referralUser,
      [ROLE.CONSULTINGPROVIDER]: consultingUser,
      [ROLE.PARENT]: parentUser,
      [ROLE.PHYSICIAN]: physicianUser
    };
    
    query = await func[userRole.code](tabCode, userId, query);
    

    【讨论】:

      【解决方案2】:

      您可以使用此解决方案 :)

      const userRole = { code: 'referral' };
      
      async function referralUser(tabCode, userId, query){
       console.log(tabCode, userId, query);
       return "referralUser Called!";
      }
      
      async function consultingUser(tabCode, userId, query){
       console.log(tabCode, userId, query);
       return "consultingUser Called!";
      }
      
      async function parentUser(tabCode, userId, query){
       console.log(tabCode, userId, query);
       return "parentUser Called!"
      }
      
      let functionName = userRole.code + 'User';
      eval(functionName)("tabCode", "userId", "query").then((results)=>{
        console.log(results);
      });

      【讨论】:

      • 这是一个很棒的例子,很短很简单。非常感谢
      猜你喜欢
      • 2023-03-24
      • 2020-02-16
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多