Photo by Alvin Mahmudov on Unsplash
Code Smell 155 - Multiple Promises
You have promises. You need to wait. Wait for them all
TL;DR: Don't block yourself in a sorted way.
Problems
Indeterminism
Performance bottleneck
Solutions
- Wait for all promises at once.
Context
We heard about semaphores while studying Operating Systems.
We should wait until all conditions are met no matter the ordering.
Sample Code
Wrong
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 !!
}
Right
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
}
Detection
[X] Semi-Automatic
This is a semantic smell.
We can tell our linters to find some patterns related to promises waiting.
Tags
- Performance
Conclusion
We need to be as close as possible to [real-world]((maximilianocontieri.com/what-is-wrong-with-..) business rules.
If the rule states we need to wait for ALL operations, we should not force a particular order.
Credits
Thanks for the idea
Photo by Alvin Mahmudov on Unsplash
JavaScript is the only language that I'm aware of that people feel they don't need to learn before they start using it.
Douglas Crockford
This article is part of the CodeSmell Series.