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
相关产品推荐
相关产品推荐

