How do you synchronously resolve a chain of es6 promises?
If you are using es6, you can achieve this using array.reduce
. I think quite neatly.
const functions = [/* array of functions which return promises */];
const finalPromise = functions.reduce(async (promise, asyncFn) => {
await promise;
return asyncFn();
}, Promise.resolve());
Your "non-loop" solution shouldn't work either. You have to pass a function to .then
, not a promise:
var p = Promise.resolve();
for (var i=1; i<=10; i++) {
(function(i) {
p = p.then(function() {
return promiseReturner(i);
});
}(i));
}
If that function returns a promise, then you get that chaining effect.
More info about promises on MDN.
Can be simplified with let
(and arrow functions):
var p = Promise.resolve();
for (let i=1; i<=10; i++) {
p = p.then(() => promiseReturner(i));
}
Or .bind
(which is ES5):
var p = Promise.resolve();
for (var i=1; i<=10; i++) {
p = p.then(promiseReturner.bind(null, i));
}