當我有多個承諾,並逐一解決他們,我可以很容易地得到每個承諾,當它正在解決它的通知。AngularJs鏈接promisses和使用通知
但是,當我鏈接承諾或使用all()
方法,然後一些通知正在丟失。我想知道爲什麼是這樣。
這裏是一個例子。比方說,我有兩個異步函數返回一個承諾,做了一些工作,而這樣做,他們打電話通知一次或多次:
function returnsSomePromise1() {...; setTimeout(...); return promise;}
function returnsSomePromise2() {...; setTimeout(...); return promise;}
現在我有三個選項來解決的承諾:
var promise1 = returnsSomePromise1();
var promise2 = returnsSomePromise2();
//Option 1: Resolve separate
promise1.then(...);
promise2.then(...);
//Option 2: Resolve chained
promise1.then(promise2).then(...);
//Option 3: Resolve with all()
$q.all([promise1, promise2]).then(...);
在每一個功能,然後我附上一個簡單的函數來通知登錄到控制檯:
.then(..., ..., function(update) { console.log(update); });
現在我覺得很有趣的是,所有三個選項產生時,不同的結果來通知。第一個打印每個異步操作的所有通知。第二個選項僅打印第一個承諾的通知,使用all()
方法的最後一個選項根本不打印任何通知。
任何人都可以解釋什麼是造成這些差異,如果它可以得到通知時,使用$q.all()
?
$ q.all返回所有響應的陣列$ q.all()。然後(arrayOfResponses),你可以使用一個for循環遍歷它們的對象。 – 2014-11-05 14:27:21
我認爲這是不正確的,'all()'接受一組promisses並返回一個promise,用'then()'傳遞一個響應數組給第一個回調函數。至少這就是我如何使用它。 – lanoxx 2014-11-05 14:42:45
是的肯定$ q.all返回一個承諾 – 2014-11-05 14:49:01