AngularJS中處理多個promise的方式_AngularJS

來源:互聯網
上載者:User

在使用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被執行或者被拒絕了,依賴於他們的處理常式仍然會被調用。

• 處理常式總是會被非同步呼叫。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.