首頁 > web前端 > js教程 > 主體

AngularJS中處理多個promise的方式_AngularJS

WBOY
發布: 2016-05-16 15:16:35
原創
942 人瀏覽過

使用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);
登入後複製

promise?

promise是一種用非同步的方式處理值的方法,promise是對象,代表了一個函數最終可能的返回值或拋出的異常,在與遠端對像打交道時我們可以把他看作是遠端對象的一個代理。 如果說是promise也是非同步處理方式的一種,那我們會想起它和XHR和$.ajax有啥差別呢?

習慣上js使用閉包或回調來對應非同步回傳的數據,例如頁面載入之後的XHR請求。我們可以跟資料進行正常交互,就好像它已經回傳了一樣,而不需要依賴回呼函數的觸發。

那麼ng提出的promise是為了解決什麼問題呢? 回調已經被使用了很長時間,通常如果有回調依賴其他還回調時將會時調試變得非常艱難,每一步調用之後都需要顯示處理錯誤。與之不同的是promise提供了另一個抽象:這些函數傳回promise物件。

為什麼要用promise

使用了promise的收穫之一是逃脫了回調的固定思維邏輯。 promise讓非同步處理的機制看起來更像是同步,基於同步函數我們可以按照預期來捕捉回傳值和異常值。可以在程式中的任何時刻捕捉錯誤,並且繞過依賴程式異常的後續程式碼,我們不需要思考這個同步帶來的好處。因此使用promise的目的是:取得功能組合和錯誤冒泡能力的同時,保持程式碼非同步運作的能力。

promise是頭等對象,自帶了一些約定。

• 只有一個resolve或reject會被呼叫到。

• 如果promise被執行或被拒絕了,依賴他們的處理程序仍然會被呼叫。

• 處理程序總是會被非同步呼叫。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板