处理承诺错误第一级try catch

时间:2018-02-21 20:43:28

标签: javascript async-await es6-promise ecmascript-2017

function testPromise(id) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            if (typeof id === 'number') {
                resolve(id);
            } else {
                reject('error');
            }
        }, 500);
    }
    );
}
async function test(){
  try{
    testPromise(10)
    for(let i=0 ; i<10000; i++){
      ....
    }
    .
    .
  }catch(err){
    console.log(err)
  }
}
test();

好吧考虑上面的代码我想异步运行testPromise函数所以如果我使用await语法testPromise(10)先运行然后运行循环代码,如果,我不使用await,testPromise(10)异步运行和一切但是,如果testPromise遇到错误,我应该如何处理呢?有没有办法使用async-await结构并在try-catch结构中处理这个错误? 我知道我可以使用catch函数testPromise(10).catch(err =>{});来处理错误,但我想知道有没有办法在我的第一级try-catch中处理它

2 个答案:

答案 0 :(得分:3)

你不能。

您可以使用try-catchawait,也可以在承诺上使用catch

您应该考虑到即使您的函数(test)已经完成执行,也可能抛出错误。

请参阅@ Bergi的答案以获得正确的例子。

答案 1 :(得分:2)

如果你想与你的循环同时运行它并正确处理来自的错误(这必然包括等待两者),那么Promise.all是你唯一的选择:

async function test() {
  try {
    await Promise.all([
      testPromise(10),
      (async function() {
        for (let i=0; i<10000; i++) {
          …
        }
        …
      }())
    ]);
  } catch(err) {
    console.log(err);
  }
}