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

