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

自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:42:43