I'm trying to chain a sequence of Promises so that the second promise will start after the first one resolves and so on. I don't understand how I cannot get it to work correctly.
Here is my demo code:
const promise1 = new Promise((resolve, reject) => { setTimeout(resolve, 5000, 'a'); }); const promise2 = new Promise((resolve, reject) => { setTimeout(resolve, 5000, 'b'); }); const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 5000, 'c'); }); promise1.then(val => { console.log('promise 1', val); promise2.then(val2 => { console.log('promise 2', val2); promise3.then(val3 => { console.log('promise 3', val3); }); }); }); So what I expected from this code goes like this:
--- 5 seconds passes --- // console outputs: 'promise 1a' --- 5 seconds passes --- // console outputs: 'promise 2b' --- 5 seconds passes --- // console outputs: 'promise 3c' But instead what happens:
--- 5 seconds passes --- // console outputs: 'promise 1a' // console outputs: 'promise 2b' // console outputs: 'promise 3c' Why is this so? Why are all three promises triggered at the same time?
promisebody runs immediately upon creation. Thethen()only determines what will happen once the promise has been resolved, it doesn't execute it.