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
可记录
答案 0 :(得分:3)
通常,将async
函数传递给诺言的then
或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
来捕获来自promise的错误(包括来自catch
函数调用的错误) ,因为它们返回了承诺)。相反,您必须使用async
返回的承诺:
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
调用:
catch
答案 1 :(得分:1)
您可以使用async/await
:
async function test() {
try {
const promise = await new Promise(async (resolve, reject) => {
reject('oe')
}).catch(async err => {
console.log('bbbbb', err)
throw err
})
} catch (err) {
console.log('aaaaa', err)
}
}
test()