[英]How can I catch rejected Promises?
我的代碼如下:
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”。
如何修改我的代碼來做到這一點?
首先,當您聲明async
函數時,這意味着您聲明一個返回Promise的函數。 因此您無需通過新的Promise進行修改
你可以做
async function errorTest() { throw new Error("my error") }
然后可以像這樣嘗試捕捉
(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) } })()
的問題是,一個錯誤被拋出在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);
}
你可以做這樣的事情
//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.
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.