簡體   English   中英

我如何捕捉被拒絕的承諾?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM