У вас есть обещания. Нужно подождать. Подождите их всех

TL;DR: не блокируйте себя сортированным образом.

Проблемы

  • индетерминизм
  • Узкое место в производительности

Решения

  1. Ждите всех обещаний сразу.

Контекст

Мы слышали о семафорах, изучая операционные системы.

Мы должны ждать, пока все условия не будут выполнены независимо от заказа.

Образец кода

Неправильный

async fetchOne() { /* long task */ }
async fetchTwo() { /* another long task */ }
async fetchAll() {
  let res1 = await this.fetchOne(); 
  let res2 = await this.fetchTwo();
  // they can run in parallel !!  
}

Верно

async fetchOne() { /* long task */ }
async fetchTwo() { /* another long task */ }
async fetchAll() {
  let [res3, res4] = await Promise.all([this.fetchOne(), this.fetchTwo()]);
  //We wait until ALL are done
}

Обнаружение

[X] Полуавтоматический

Это смысловой запах.

Мы можем указать нашим линтерам найти некоторые шаблоны, связанные с ожиданием промисов.

Теги

  • Производительность

Заключение

Нам нужно быть как можно ближе к реальным бизнес-правилам.

Если в правиле указано, что нам нужно ждать ВСЕХ операций, мы не должны навязывать определенный порядок.

Кредиты

Спасибо за идею



Фото Элвин Махмудов на Unsplash

JavaScript – это единственный известный мне язык, который, по мнению людей, не нужно изучать, прежде чем начать его использовать.

Дуглас Крокфорд



Эта статья является частью серии CodeSmell.