首页 > 解决方案 > 重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”

问题描述

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

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 块吗?你能解释一下为什么吗?

标签: javascriptsonarqubereturn

解决方案


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


推荐阅读