You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中函数按需抛异常或返回值的设计模式

JavaScript 中实现「可选异常/返回值」的设计模式

我们有时需要调用函数后自行用try/catch处理异常,有时则希望同一函数在执行失败时直接返回null或false。这种需求类似Rails框架ActiveRecord中的用法:可以选择调用User.find(1)(未找到时返回nil)或User.find!(1)(未找到时抛出异常)。

作为函数开发者,我可以自由设计实现方式,请问JavaScript中有没有针对该需求的既定设计模式?


思路一:模仿ActiveRecord命名风格实现双函数

实现两个后缀区分的同名函数,一个专注抛出异常,一个捕获异常并返回null:

// 成功返回API数据,失败则抛出异常
function getDataFromAPI() {
  const response = callApi(); // callApi在非200状态时抛出错误
  return response.data;
}

// 成功返回API数据,失败则返回null
function getDataFromAPI_() {
  try {
    return getDataFromAPI();
  } catch(e) {
    return null;
  }
}

思路二:通用异常包装函数

实现一个通用的包装函数,接收目标函数并执行,捕获异常后返回null,让目标函数专注核心逻辑:

// 成功返回API数据,无data属性时会抛出异常
function getDataFromAPI() {
  const response = callApi();
  return response.data;
}

// 执行传入的函数,失败则返回null
function nullIfError(func) {
  try {
    return func();
  } catch(e) {
    return null;
  }
}

// 使用方式
nullIfError(getDataFromAPI)

思路三:参数控制行为(不推荐)

通过可选参数控制函数是否抛出异常,但这种方式会让函数始终被try/catch包裹,灵活性较差:

function getDataFromAPI(throwError = true) {
  try {
    const response = callApi();
    return response.data;
  } catch(e) {
    if (throwError) throw(e);
    else return null;
  }
}

内容的提问来源于stack exchange,提问作者burn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:45:41