Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sequence of rejected promise with Promise.reject()

I am learning microtask queue and i have a simple question.

With the following code:

Promise.resolve().then(()=>console.log("Resolved1 Promise"));
Promise.reject().then(()=>console.log("Resolved2 Promise")).catch(()=>console.log('Rejected2 Promise'));
Promise.resolve().then(()=>console.log("Resolved3 Promise"));
Promise.resolve().then(()=>console.log("Resolved4 Promise"));
Promise.resolve().then(()=>console.log("Resolved5 Promise"));

I expected output to be in the sequence:

Resolved1 Promise
Rejected2 Promise
Resolved3 Promise
Resolved4 Promise
Resolved5 Promise

But as you can try above, rejected callback is triggered in the last. Can anyone explain it to me?

like image 215
Muhammad Hamza Maqsood Avatar asked Sep 29 '25 10:09

Muhammad Hamza Maqsood


1 Answers

This is because you're chaining .chatch() to the result of .then() function. This can be fixed by removing .then() from the promise:

Promise.resolve().then(() => console.log("Resolved1 Promise"));
Promise.reject().catch(() => console.log('Rejected2 Promise'));
Promise.resolve().then(() => console.log("Resolved3 Promise"));
Promise.resolve().then(() => console.log("Resolved4 Promise"));
Promise.resolve().then(() => console.log("Resolved5 Promise"));

Optionally, if you want to listen for both events, use a sigle .then() call to assign both listeners:

Promise.resolve().then(() => console.log("Resolved1 Promise"));
Promise.reject().then(
    () => console.log("Resolved2 Promise"),
    () => console.log('Rejected2 Promise')
);
Promise.resolve().then(() => console.log("Resolved3 Promise"));
Promise.resolve().then(() => console.log("Resolved4 Promise"));
Promise.resolve().then(() => console.log("Resolved5 Promise"));
like image 56
MfyDev Avatar answered Oct 02 '25 05:10

MfyDev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!