Below is the code that is handy when you want to execute several Promise actions in sequence:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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" ] |