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

TypeScript中如何从异步函数获取返回值并处理错误?

解决方案

要在处理异步函数错误的同时获取返回值,有两种简洁且常用的实现方式:

1. 使用 try/catch 包裹 await 调用

这是处理异步错误最直观的方式,利用 async/await 的语法糖配合 try/catch 直接捕获错误:

import { myfuncAsync } from 'samplemodule';

async function fetchResult() {
  try {
    // 执行异步函数并获取返回值
    const result = await myfuncAsync(args);
    // 在这里处理成功的结果
    return result;
  } catch (err) {
    // 捕获错误并自定义处理逻辑
    throw new Error(`error has occurred: ${err.message}`, { cause: err });
  }
}

// 调用函数获取结果
const result = await fetchResult();

这种方式逻辑清晰,符合同步代码的错误处理习惯,同时能完整保留原始错误的上下文(通过 cause 参数)。

2. 封装通用异步错误处理工具函数

如果需要在多个地方复用错误逻辑,可以封装一个工具函数,返回包含错误和结果的数组:

import { myfuncAsync } from 'samplemodule';

// 定义通用异步处理函数
async function handleAsync(promise) {
  try {
    const result = await promise;
    return [null, result];
  } catch (err) {
    return [new Error(`error has occurred: ${err.message}`, { cause: err }), null];
  }
}

// 使用方式
const [err, result] = await handleAsync(myfuncAsync(args));
if (err) {
  // 错误处理:抛出错误或记录日志
  throw err;
}
// 处理成功返回的结果

这种方式避免了重复编写 try/catch,调用时通过解构数组快速判断执行状态。

注意:你原本代码中同时使用 .then/.catch 和 await 属于重复逻辑,没必要同时使用——await 本身就是 Promise 的语法糖,try/catch 完全可以替代 .then/.catch 的错误处理流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:45:58