Async / await vs тогда, что является лучшим для производительности? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть простой код в JavaScript, который выполняет запрос в API и возвращает ответ, просто.Но в этом случае у меня будут тысячи запросов.Итак, какой из вариантов кода будет работать лучше и почему.Кроме того, какой из них рекомендуется как хорошие практики в эти дни?

Первый вариант - использование .then для разрешения обещаний, а второй - async / await.

В моих тестах два варианта имели очень похожие результаты без существенных различий, но я 'Я не уверен в масштабе.

// Using then
doSomething(payload) {
  const url = 'https://link-here/consultas';
  return this.axios.get(url, {
    params: {
      token: payload.token,
      chave: payload.chave,
    },
   }).then(resp => resp.data);
}

// Using Async / await
async doSomething(payload) {
   const url = 'https://link-here/consultas';
   const resp = await this.axios.get(url, {
   params: {
     token: payload.token,
     chave: payload.chave,
    },
 });
 return resp.data;
}

Любое объяснение будет иметь большую ценность.

1 Ответ

0 голосов
/ 02 февраля 2019

await - это просто внутренняя версия .then() (делает то же самое).Причина выбора одного из другого не связана с производительностью, а связана с желаемым стилем кодирования или удобством кодирования.Конечно, у переводчика есть еще несколько возможностей для оптимизации вещей внутренне с помощью await, но вряд ли так и должно быть, как вы решите, какой использовать.Если бы все остальное было равным, я бы выбрал await по указанной выше причине.Но я бы сначала выбрал, который сделал код проще для написания, понимания, поддержки и тестирования.

При правильном использовании await может часто сэкономить вам кучу строк кода, делая ваш код прощечитать, тестировать и поддерживать .Вот почему он был изобретен.

Нет никакой разницы между двумя версиями вашего кода.Оба достигают одного и того же результата, когда вызов axios успешен или имеет ошибку.

Где await может иметь большее преимущество, если у вас было несколько последовательных асинхронных вызовов, которые нужно было сериализовать.Тогда вместо того, чтобы заключать их в квадратные скобки внутри каждого обработчика .then() для правильной их цепочки, вы можете просто использовать await и иметь более простой код.

Распространенная ошибка как с await, так и с .then():забыть правильную обработку ошибок.Если ваше желание обрабатывать ошибки в этой функции - просто вернуть отклоненное обещание, то обе ваши версии делают это одинаково.Но если у вас есть несколько асинхронных вызовов в строке и вы хотите сделать что-то более сложное, чем просто возврат первого отклонения, тогда методы обработки ошибок для await и .then() / .catch()совсем другое и, что кажется более простым, будет зависеть от ситуации.

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