在 try catch 中处理 promise 错误第一级

handle promise error first level inside try catch

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

中有什么方法可以处理它

你不能。

您可以将 try-catchawait 一起使用,或者在承诺中使用 catch

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

有关正确示例,请参阅@Bergi 的回答。

如果您想 运行 它与您的循环同时进行并正确处理来自 both 的错误(这必然包括等待两者),那么 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);
  }
}