@uniquerichboy

Async await правильно использование?

Подскажите пожалуйста, правильно ли я использую async await, уже запутался как с ними правильно работать, так как например нельзя сразу поставить async на все и везде проставить await, тогда она будет писать ошибка, так как внутри есть ещё функции, а выглядит как-то костыльно и хотел вот узнать, правильно ли я делаю?
try {
				socket.on("exit", async function (team) {
					await axios.post(process.env.REACT_APP_API_URL + 'api/games/remove', {
						game: MATCH_ID, team,
					}).then(async function (response) {
						await dispatch({ 
							type: UPDATE_GAME, 
							game: response.data.game, 
							team_a: response.data.team_a,
							team_b: response.data.team_b,
						});
						await dispatch({ 
							type: ACCEPT, 
							accepts: false, 
						});
					});
				});
			} catch (e) {
				console.error(e);
			}
  • Вопрос задан
  • 563 просмотра
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Именно тут await ждет когда отработает колбек, а не запрос. Если dispatch не промис, то await перед ним тоже не нужен. Так-же блок try/catch никак не отреагирует на исключения в промисе или колбеке. Грубо говоря код делает вовсе не то, что тебе от него хочется.

Если надо отлавливать исключения, то это делать надо там, где они вылетают. А это запрос и его обработка. Добавление слушателя исключение скорей всего не выбросит, если там не грубый баг. А исключение при вызове колбека так не отловить, так как вызовется он когда-то потом, когда этот код уже отработает.

socket.on("exit", async () => {
  try {
    const response = await axios.post(
      process.env.REACT_APP_API_URL + "api/games/remove",
      {
        game: MATCH_ID,
        team,
      },
    );

    await dispatch({
      type: UPDATE_GAME,
      game: response.data.game,
      team_a: response.data.team_a,
      team_b: response.data.team_b,
    });

    await dispatch({
      type: ACCEPT,
      accepts: false,
    });
  } catch (err) {
    console.error(err);
  }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы