在使用AngularJS中處理promise的時候,有時會碰到需要處理多個promise的情況。
最簡單的處理就是每個promise都then。如下:
var app = angular.module("app",[]); app.controller("AppCtrl", function($q. $timeout){ var one = $q.defer(); var two = $q.defer(); var three = $q.defer(); $timeout(function(){ one.resolve("one done"); }, Math.random() * 1000) $timeout(function(){ two.resolve("two done"); }, Math.random() * 1000) $timeout(function(){ three.resolve("three done"); }, Math.random() * 1000) functioin success(data){ console.log(data); } one.promise.then(success); two.promise.then(success); three.promise.then(success); })
有沒有更好的方式?
$q.all方法可以接受promise的一個陣列,按如下呼叫:
var all = $q.all([one.promise, two.promise, three.promise]);
all.then(success);