W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
$q 有四個方法:
$q.all() 方法適用于并發(fā)場景很合適:
angular.module('app', [], angular.noop) .controller('TestCtrl', function($scope){ var p = $http.get('/json', {params: {a: 1}}); var p2 = $http.get('/json', {params: {a: 2}}); var all = $q.all([p, p2]); p.success(function(res){console.log('here')}); all.then(function(res){console.log(res[0])}); });
$q.reject() 方法是在你捕捉異常之后,又要把這個異常在回調(diào)鏈中傳下去時使用:
要理解這東西,先看看 promise 的鏈?zhǔn)交卣{(diào)是如何運作的,看下面兩段代碼的區(qū)別:
var defer = $q.defer(); var p = defer.promise; p.then( function(data){return 'xxx'} ); p.then( function(data){console.log(data)} ); defer.resolve('123');
var defer = $q.defer(); var p = defer.promise; var p2 = p.then( function(data){return 'xxx'} ); p2.then( function(data){console.log(data)} ); defer.resolve('123');
從模型上看,前者是“并發(fā)”,后者才是“鏈?zhǔn)健薄?/p>
而 $q.reject() 的作用就是觸發(fā)后鏈的 error 回調(diào):
var defer = $q.defer(); var p = defer.promise; p.then( function(data){return data}, function(data){return $q.reject(data)} ). then( function(data){console.log('ok, ' + data)}, function(data){console.log('error, ' + data)} ) defer.reject('123');
最后的 $q.when() 是把數(shù)據(jù)封裝成 promise 對象:
var p = $q.when(0, function(data){return data}, function(data){return data}); p.then( function(data){console.log('ok, ' + data)}, function(data){console.log('error, ' + data)} );
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: