promise all in promise all
var arr = [ {subarr: [1,2,3]}, {subarr: [4,5,6]}, {subarr: [7,8,9]} ]; function processAsync(n) { return new Promise(function(resolve) { setTimeout( function() { resolve(n * n); }, Math.random() * 1e3 ); }); } Promise.all(arr.map(function(entity){ return Promise.all(entity.subarr.map(function(item){ return processAsync(item); })); })).then(function(data) { console.log(data); });