我的代码如下:
errorTest().then((result) => {
try {
console.log(result);
}
catch (err) {
console.error("Error detected 1");
console.error(err);
}
}).catch((err) => {
console.error("Error detected 2");
console.error(err);
});
async function errorTest() {
return new Promise((resolve, reject) => {
reject("my error");
})
}
当前,它显示“检测到错误2”。
我想使用try / catch捕获我的错误,以便代码显示“检测到错误1”。
我该如何修改我的代码?
答案 0 :(得分:5)
首先,当您声明async
函数时,这意味着您声明了一个返回Promise的函数。因此您无需通过新的Promise来改变它
你可以做
async function errorTest() {
throw new Error("my error")
}
然后您可以使用try catch来捕获它
(async () =>{
try{
await errorTest()
}
catch(err){
console.log(err)
}
})()
然后完整的代码将如下所示
async function errorTest() {
throw new Error("my error")
}
(async () =>{
try{
await errorTest()
}
catch(err){
console.log(err)
}
})()
答案 1 :(得分:0)
问题在于errorTest
函数中引发错误,该错误首先发生,这意味着调用.catch
函数而不是.then
。
async function errorTest() {
return new Promise((resolve, reject) => {
reject("my error");
})
}
try {
var result = await errorTest()
try {
console.log(result);
} catch (err) {
console.error("Error detected 2");
console.error(err);
}
} catch (err) {
console.error("Error detected 1");
console.error(err);
}
答案 2 :(得分:0)
您可以做这样的事情
//no need to make it async
function errorTest() {
return new Promise((resolve, reject) => {
reject("my error");
})
}
async function test(){
try{
await errorTest();
try{
console.log(result);
//try some syncronous task.
}
catch(e){
console.error("Error detected 1");
console.error(err);
}
}
catch(err){
//if promise returned by errorTest() is rejected; rejected value: err
console.error("Error detected 2");
console.error(err);
}
}
test(); //this also returns a promise though.
希望,这会有所帮助。