Выполнение функции продолжается после возврата в блок catch - PullRequest
0 голосов
/ 09 декабря 2018

Используя 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 голосов
/ 09 декабря 2018

Возврат находится внутри анонимной функции, которую вы передаете методу catch.Таким образом, он возвращается только из этой анонимной функции.Будучи последним утверждением в функции, оно на самом деле не имеет никакой цели.

Большая разница между двумя фрагментами кода заключается в том, что один использует языковую конструкцию try catch, а другой - метод catch, который ожидает анонимную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...