AngularJSのdeferredで並列実行

jQueryの$.whenみたいに複数のdeferredを同時に処理するみたいのはAngularJSだと$q.allでできる。

var d1 = $q.defer();
var d2 = $q.defer();
var d3 = $q.defer();
$timeout(function() {
  console.log('d1');
  d1.resolve('d1');
}, 10);
$timeout(function() {
  console.log('d2');
  d2.resolve('d2');
}, 1000);
$timeout(function() {
  console.log('d3');
  d3.resolve('d3');
}, 200);

$q.all([ d1.promise, d2.promise, d3.promise ]).then(function(result) {
  console.log(result); //=> ['d1', 'd2', 'd3']
});

引数は配列でもオブジェクトでもいける。

$q.whenというのもあるけどこれはオブジェクトを$qのdeferredにラップするみたいな感じっぽいので並列処理ができるやつではない。