重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”

Posted

技术标签:

【中文标题】重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”【英文标题】:Refactor this function to use "return" consistently inside and outside of if statement Javascript 【发布时间】:2021-09-21 00:25:29 【问题描述】:

我有一个函数,它的声纳报告它没有一致地使用返回:

function getRate(a) 
  try 
    const manager = rateManagement.getInstance();
    const rate = await manager.getAllRate();
    let result = 0;

    if (rate && rate.length) 
      const rateConfig = rate.find((x) => x.rate?.includes(a));
      const aRating = rateConfig?.rate;

      result = aRating || result;
    

    return result;
   catch (error) 
    logger.logError(error);
  

但是,使用此函数,即使我在 if 中也没有返回任何内容,声纳也没有检测到它使用 return 不一致:

 getGroup() 
  const manager = groupManagement.getInstance();
  const group = await manager.getAllGroup();

  let result = [];

  if (group && group.length) 
    result = group.map((x) => x.rate);
  

  return result;

是因为 try, catch 块吗?你能解释一下为什么吗?

【问题讨论】:

如果try 块内抛出错误,您认为函数会返回什么? 哦,我现在明白了。谢谢@Ivar catch 错误块中的常见返回是什么,返回 null? @Ivar 这在一定程度上取决于调用函数时是否可以预期。如果您返回null,但调用代码没有考虑到这一点,则很可能会导致错误。如果没有要返回的逻辑值,则可能强烈表明错误处理应该在该行的其他位置而不是在此函数中。这一切都取决于如果您的代码未能获得速率应该发生什么。 【参考方案1】:

函数getRate 如果在try 块内抛出错误,则不返回值,因为catch 块只记录错误,但不返回值。你可以通过返回一些值来“修复”这个问题,例如,undefined。但是,抛出错误并让调用者处理它通常更有意义。

【讨论】:

以上是关于重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”的主要内容,如果未能解决你的问题,请参考以下文章

重构 if else 语句

具有许多条件返回语句的重构方法

关于javascript函数中if语句的问题 - if语句返回true但函数返回false如何

重构许多嵌套 if 或链式 if 语句

JavaScript在if语句中等待异步函数[重复]

如何重构这组庞大的 if 语句?