У вас есть обещания. Нужно подождать. Подождите их всех
TL;DR: не блокируйте себя сортированным образом.
Проблемы
- индетерминизм
- Узкое место в производительности
Решения
- Ждите всех обещаний сразу.
Контекст
Мы слышали о семафорах, изучая операционные системы.
Мы должны ждать, пока все условия не будут выполнены независимо от заказа.
Образец кода
Неправильный
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.