如何重构需返回值、传参并调用异步方法的switch语句
重构Switch语句的最优方案
这问题我熟!用对象映射表来重构你的switch语句就完全能搞定这三个需求——返回异步结果、传递参数、调用异步方法,而且后续业务扩展时维护起来超级方便。
重构后的代码示例
// 定义一个映射表,将case字符串和对应的异步函数绑定 const stampActionMap = { emisores: StampEmisor, tipodocumento: StampTipoDocumento, plantillas: StampPlantilla }; // 核心逻辑处理 const actionHandler = stampActionMap[something]; if (actionHandler) { // 直接调用异步函数并返回结果,参数按需传递 return await actionHandler(id); } // 处理默认情况,和原switch的default逻辑一致 return BadApiRequest("blabla was not found.");
为什么这个方案满足你的所有需求
- 返回值:
await actionHandler(id)会等待异步函数执行完成,并直接返回它的结果,和原switch语句的返回行为完全一致 - 传递参数:你可以直接把
id(或者以后新增的其他参数)传给映射的函数,比如需要多参数时改成await actionHandler(id, anotherParam)就行 - 调用异步方法:映射表中存储的就是你的异步函数,结合
await关键字完美处理异步逻辑
后续扩展的优势
以后新增业务分支时,你根本不需要修改核心逻辑代码,只需要在stampActionMap里添加新的键值对就行,比如:
const stampActionMap = { // 原有项... nuevaEntidad: StampNuevaEntidad // 新增的业务处理函数 };
这种方式比不断给switch加case要整洁得多,也更符合代码的开闭原则。
内容的提问来源于stack exchange,提问作者Gonzo345
相关产品推荐
相关产品推荐

