AngularJS中處理多個(gè)promise的方式
在使用AngularJS中處理promise的時(shí)候,有時(shí)會(huì)碰到需要處理多個(gè)promise的情況。
最簡(jiǎn)單的處理就是每個(gè)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);
})
有沒(méi)有更好的方式?
$q.all方法可以接受promise的一個(gè)數(shù)組,按如下調(diào)用:
var all = $q.all([one.promise, two.promise, three.promise]); all.then(success);
什么是promise?
promise是一種用異步的方式處理值的方法,promise是對(duì)象,代表了一個(gè)函數(shù)最終可能的返回值或者拋出的異常,在與遠(yuǎn)程對(duì)象打交道時(shí)我們可以把他看作是遠(yuǎn)程對(duì)象的一個(gè)代理。 如果說(shuō)是promise也是異步處理方式的一種,那么我們會(huì)想起它和XHR和$.ajax有啥區(qū)別呢?
習(xí)慣上js使用閉包或者回調(diào)來(lái)相應(yīng)非同步返回的數(shù)據(jù),比如頁(yè)面加載之后的XHR請(qǐng)求。我們可以跟數(shù)據(jù)進(jìn)行正常交互,就好像它已經(jīng)返回了一樣,而不需要依賴回調(diào)函數(shù)的觸發(fā)。
那么ng提出的promise是為了解決什么問(wèn)題呢? 回調(diào)已經(jīng)被使用了很長(zhǎng)時(shí)間,通常如果有回調(diào)依賴其他還回調(diào)時(shí)將會(huì)時(shí)調(diào)試變得非常艱難,每一步調(diào)用之后都需要顯示處理錯(cuò)誤。與之不同的是promise提供了另外一個(gè)抽象:這些函數(shù)返回promise對(duì)象。
為什么使用promise
使用了promise的收獲之一是逃脫了回調(diào)的固定思維邏輯。promise讓異步處理的機(jī)制看上去更像是同步,基于同步函數(shù)我們可以按照預(yù)期來(lái)捕獲返回值和異常值??梢栽诔绦蛑械娜魏螘r(shí)刻捕捉錯(cuò)誤,并且繞過(guò)依賴于程序異常的后續(xù)代碼,我們不需要思考這個(gè)同步帶來(lái)的好處。因此使用promise的目的是:獲取功能組合和錯(cuò)誤冒泡能力的同時(shí),保持代碼異步運(yùn)行的能力。
promise是頭等對(duì)象,自帶了一些約定。
• 只有一個(gè)resolve或者reject會(huì)被調(diào)用到。
• 如果promise被執(zhí)行或者被拒絕了,依賴于他們的處理程序仍然會(huì)被調(diào)用。
• 處理程序總是會(huì)被異步調(diào)用。
相關(guān)文章
angular學(xué)習(xí)之動(dòng)態(tài)創(chuàng)建表單的方法
這篇文章主要介紹了angular學(xué)習(xí)之動(dòng)態(tài)創(chuàng)建表單的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
angularJs中$http獲取后臺(tái)數(shù)據(jù)的實(shí)例講解
今天小編就為大家分享一篇angularJs中$http獲取后臺(tái)數(shù)據(jù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Angularjs的$http異步刪除數(shù)據(jù)詳解及實(shí)例
這篇文章主要介紹了Angularjs的$http異步刪除數(shù)據(jù)詳解及實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)思路及實(shí)現(xiàn)具體的方法,需要的朋友可以參考下2017-07-07
AngularJS基礎(chǔ) ng-src 指令簡(jiǎn)單示例
本文主要介紹AngularJS ng-src 指令,這里對(duì)ng-src 指令的資料做了詳細(xì)整理,有需要的小伙伴可以參考下2016-08-08
基于Angular.js實(shí)現(xiàn)的觸摸滑動(dòng)動(dòng)畫(huà)實(shí)例代碼
這篇文章主要介紹了基于Angular.js實(shí)現(xiàn)的觸摸滑動(dòng)動(dòng)畫(huà)實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
AngularJS入門(mén)教程之與服務(wù)器(Ajax)交互操作示例【附完整demo源碼下載】
這篇文章主要介紹了AngularJS與服務(wù)器Ajax交互操作的方法,可實(shí)現(xiàn)post傳輸數(shù)據(jù)的功能,并附帶完整的demo源碼供讀者下載參考,源碼中還包含了前面章節(jié)的示例文件,需要的朋友可以參考下2016-11-11
詳解AngularJs HTTP響應(yīng)攔截器實(shí)現(xiàn)登陸、權(quán)限校驗(yàn)
本篇文章主要介紹了AngularJs HTTP響應(yīng)攔截器實(shí)現(xiàn)登陸、權(quán)限校驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Angular4實(shí)現(xiàn)動(dòng)態(tài)添加刪除表單輸入框功能
這篇文章主要介紹了Angular4實(shí)現(xiàn)動(dòng)態(tài)添加刪除表單輸入框功能,需要的朋友可以參考下2017-08-08

