自定义TryCatch函数无法返回值的问题求助
解决方案:让自定义TryCatch兼容有/无返回值的函数
你的核心问题是原TryCatch函数没有返回被包裹函数的执行结果,导致调用后无法获取返回值。我们只需要修改TryCatch的逻辑,让它返回目标函数的执行结果,同时在错误捕获后处理返回值的兼容性。
修改后的TryCatch函数
function TryCatch(fxn) { try { // 关键:返回被包裹函数的执行结果 return fxn(); } catch (err) { // 保留原有的错误日志逻辑 TryLogError("", err, false); // 错误场景下返回undefined,保证无返回值函数的兼容性 return undefined; } }
调整调用方式
对于需要返回值的函数,比如你的NewAdministratorDataToSubmit,需要让它返回TryCatch的执行结果:
function NewAdministratorDataToSubmit() { // 返回TryCatch的结果,这样就能拿到内部的admin对象了 return TryCatch(function () { var admin = { administratorName: $("#txtNewAdmin").val(), administratorPassword: $("#txtPassword").val(), administratorEmail: $("#txtAdministratorEmail").val(), administratorRoleID: $("#AdminRoles").val(), LoginUserName: $("#txtNewAdminUserName").val() }; return admin; }); }
兼容性说明
- 对于有返回值的函数:
TryCatch会正确传递目标函数的返回值,你可以像普通函数一样获取结果。 - 对于无返回值的函数:即使目标函数没有
return语句,TryCatch也会返回undefined,不会破坏原有的执行逻辑,比如:function DoSomeOperation() { TryCatch(function () { // 只是执行操作,没有返回值 $("#someElement").text("Updated"); }); }
额外优化:支持异步函数
如果你的项目里有异步函数需要包裹,可以扩展一个异步版本的TryCatch:
async function TryCatchAsync(fxn) { try { return await fxn(); } catch (err) { TryLogError("", err, false); return undefined; } }
调用示例:
async function FetchAdministratorData() { return await TryCatchAsync(async () => { const response = await fetch("/api/administrators"); return response.json(); }); }
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

