Below is the code that is handy when you want to execute several Promise actions in sequence:
function PromiseChain(arr, fct) {
var dfd = Promise.resolve();
var res = arr.map(function(item,idx) {
dfd = dfd.then(function() {
return fct(item,idx)
});
return dfd
});
return Promise.all(res)
}
// for short version:
// function PromiseChain(n,r){var e=Promise.resolve(),i=n.map(function(n,i){return e=e.then(function(){return r(n,i)})});return Promise.all(i)}
And an example about how to use it:
function promFunc(key) {
return new Promise(function(prom_res) {
setTimeout(function() { prom_res(key) }, 1000);
})
}
PromiseChain(["a", "b", "c"], function(val, idx) {
console.log(idx, val);
return promFunc(idx+"_"+val);
})
.then(function(res) {
console.log(res);
})
// result:
// 0 a
// 1 b
// 2 c
// Array [ "0_a", "1_b", "2_c" ]