国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

AngularJS $q的方法介紹

2018-07-26 17:00 更新

$q 有四個方法:

  • $q.all() 合并多個 promise ,得到一個新的 promise
  • $q.defer() 返回一個 deferred 對象
  • $q.reject() 包裝一個錯誤,以使回調(diào)鏈能正確處理下去
  • $q.when() 返回一個 promise 對象

$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)}
);


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號