使用async / await,我尝试了两种不同的语法:



async function asyncFunc() {
    return new Promise((resolve, reject) => {
  	setTimeout(() => {
    	    reject('promise rejected')
        }, 500);
    });
}

async function asyncCallWithoutTryCatchBlock() {
    await asyncFunc().catch((err) => {
  	console.log('Catching error');
        return;
    });
    console.log('Outside, after catch is called');
}

async function asyncCallWithTryCatchBlock() {
  try {
  	await asyncFunc();
  } catch(err) {
  	console.log('Catching error');
  	return;
  }
  console.log('Outside, after catch is called');
}

asyncCallWithoutTryCatchBlock();
asyncCallWithTryCatchBlock();





我期望这个输出:

Catching error
Catching error


我得到这个:

Catching error
Outside, after catch is called
Catching error


我想知道为什么在console.log块中进行显式返回时,为什么在asyncCallWithoutTryCatchBlock中调用外部catch

最佳答案

返回值是传递给catch方法的匿名函数内部。这样,它仅从该匿名函数返回。作为函数中的最后一条语句,它实际上毫无用处。

这两个代码段之间的最大区别是,一个使用语言结构try catch,另一个使用称为catch的方法,该方法需要匿名函数。

10-01 01:38