javascript - 如何捕获从异步函数重新抛出的错误?
问题描述
try {
const promise = new Promise(async (resolve, reject) => {
reject('oe')
})
.catch(async (err) => {
console.log('bbbbb', err)
throw err
})
} catch (err) {
console.log('aaaaa', err)
}
是否可以使可aaaaa
记录
解决方案
async
通常,将函数传递给 promisethen
或函数是没有意义的catch
。将一个传递给 Promise 构造函数是没有意义的。如果你要去,早点去async
。此外,当您想要一个被拒绝的测试承诺等时,只需使用Promise.reject('oe')
.
为了从async
带有try
/的函数中捕获错误catch
,您必须在async
函数中。在这种情况下,对您的示例的最小更改将是await
调用的结果catch
:
// Assuming this is in an `async` function, making only minimal changes
try {
const promise = new Promise(async (resolve, reject) => {
reject('oe')
})
.catch(async (err) => {
console.log('bbbbb', err)
throw err
})
await promise; // ***
} catch (err) {
console.log('aaaaa', err)
}
如果您不在async
函数中,则不能使用try
/catch
来捕获来自 Promise 的错误(包括来自async
函数调用,因为它们返回 Promise)。相反,您必须使用返回的承诺catch
:
// Assuming this is NOT in an `async` function, making only minimal changes
const promise = new Promise(async (resolve, reject) => {
reject('oe')
})
.catch(async (err) => {
console.log('bbbbb', err)
throw err
})
.catch(err => {
console.log('aaaaa', err)
})
进行较大的更改,如果您已经在一个async
函数中,请摆脱then
andcatch
调用:
// Assuming this is in an `async` function
try {
try {
await Promise.reject('oe');
} catch (innerError) {
console.log('bbbbb', innerError);
throw innerError;
}
} catch (outerError) {
console.log('aaaaa', outerError);
}
推荐阅读
- android-studio - Android Studio - LocationManager(获取经纬度)
- wordpress - Elementor 查询帖子不适用于单个帖子
- python - 使用 src / 目标坐标使用 Python PIL 进行透视变换
- java - 在 PutObject 时设置 s3 存储桶策略
- google-sheets - 如何从下拉列表中覆盖其 id 的值?
- c++ - 我不明白为什么我需要按特定顺序放置两行才能使其工作(递归)
- animation - 哪个动画适合可扩展容器颤动?
- java - 我在 java 项目中找不到 SqlServerDriver
- laravel - Laravel 递归作业限制为 22
- php - 远程服务器上的 ftp_get 获取文件无法打开流:没有这样的文件或目录