在catch块中返回后,函数执行继续

时间:2018-12-09 15:33:25

标签: javascript 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吗?

1 个答案:

答案 0 :(得分:2)

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

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