An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
December 22, 2021 02:16 pm GMT
Let me know in comments other cool ideas using
Original Link: https://dev.to/gajananpp/using-promiserace-usefully-420f
Using Promise.race usefully
When doing long running tasks like :-
- DB query which may take long time
- Reading big files
- API which may take long time to complete
- Waiting for some event
You may want to stop if the task is taking more time than usual to get completed. In that case Promise.race
can be useful.
Puppeteer project uses
Promise.race
to handle page/network lifecycle events with timeouts during automation.
Here's an example :-
/** * A utility function which throws error after timeout * @param timeout - timeout in seconds * @returns - promise which gets rejected after timeout */function timer(timeout) { return new Promise((resolve, reject) => { setTimeout(reject, timeout * 1000) })}/** * Mock db query which take 5 seconds to complete * @returns - query promise */function bigQuery() { return new Promise((resolve, reject) => { setTimeout(resolve, 5 * 1000) })}// race both bigQuery and timer tasks// `Promise.race` can take multiple promises if you want to race them allPromise.race([ bigQuery(), timer(1)]).then(() => console.log(' Query successful within time limit')) .catch(() => console.log(' Query failed with timeout'))// ==> will log ' Query failed with timeout'// also try running above code by changing timer's timeout value to 6 seconds, you will get successful log
You can play with the above code here :-
/**A utility function which throws error after timeout@param timeout - timeout in seconds@returns - promise which gets rejected after timeout*/function timer(timeout) {return new Promise((resolve, reject) => { setTimeout(reject, timeout * 1000)})}/**Mock db query which take 5 seconds to complete@returns - query promise*/function bigQuery() {return new Promise((resolve, reject) => { setTimeout(resolve, 5 * 1000)})}// race both bigQuery and timer tasks// Promise.race can take multiple promises if you want to race them allPromise.race([ bigQuery(), timer(1)]).then(() => console.log(' Query successful within time limit')) .catch(() => console.log(' Query failed with timeout'))// ==> will log ' Query failed with timeout'// also try running above code by changing timer's timeout value to 6 seconds, you will get successful log
Let me know in comments other cool ideas using Promise.race
See my projects on Github.
Original Link: https://dev.to/gajananpp/using-promiserace-usefully-420f
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To