最近我在做angularjs程式時遇到了一個問題 1.頁面有很多選擇框,一個選擇框裡面有眾多的選擇項,和一個預設選定的項,像下麵這樣(很多選擇框,不只一個): 2.眾多的選項要從後臺介面得到,預設項從另一個後臺介面得到,這就需要$promise.then()操作 3.而多個$promise.then ...
最近我在做angularjs程式時遇到了一個問題
1.頁面有很多選擇框,一個選擇框裡面有眾多的選擇項,和一個預設選定的項,像下麵這樣(很多選擇框,不只一個):
2.眾多的選項要從後臺介面得到,預設項從另一個後臺介面得到,這就需要$promise.then()操作
3.而多個$promise.then()屬於非同步操作,先後順序不是一定的,如果先得到眾多選項,後得到預設值,顯示就沒有問題,如果順序顛倒,預設項就會為空,這不是我想要的
4.這就需要眾多選項的後臺請求都獲得完,才去後臺請求預設值,
就用$q.all方法
let list = $q.all({ // 多個後臺請求,部分先後順序
url1: getUrl1().$promise,
url2: getUrl2().$promise,
url3: getUrl3().$promise,
});
$scope.list.then(function (result) {
// 三個後臺請求結果
result.url1
result.url2
result.url3
}).finally(function () { // finally的優點:1.無論成功失敗都會執行 2.前面三個請求結束後才會執行
// 最後一個後臺請求
// TODO
});
補充:當然還有then().then().then()......這種方法,就把請求順序執行了,不過select眾多選項的後臺請求不需要先後順序,只是預設項需要最後執行,我就選擇$q.all這種方法了