【问题标题】:Refactor this function to use "return" consistently inside and outside of if statement Javascript重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”
【发布时间】: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,但调用代码没有考虑到这一点,则很可能会导致错误。如果没有要返回的逻辑值,则可能强烈表明错误处理应该在该行的其他位置而不是在此函数中。这一切都取决于如果您的代码未能获得速率应该发生什么。

标签: javascript sonarqube return


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2010-09-20
    相关资源
    最近更新 更多