Angular $q service學習筆記

$q service in module ng

參考文檔

http://code.angularjs.org/1.2.6/docs/api/ng.$qangularjs

方法簡介

$q service 四個方法函數 , 按照我的理解劃分爲三類。api

  1. 非鏈式調用數組

    $q.when(value)promise

    Returns a promise of the passed value or promise
    傳遞變量值,promise.then()執行成功回調函數

    $q.all(promises)code

    Combines multiple promises into a single promise that is resolved when all of the input promises are resolved.
    多個promise必須執行成功,才能執行成功回調,傳遞值爲數組或哈希值,數組中每一個值爲與Index對應的promise對象。對象

  2. 錯誤信息傳遞ip

    $q.reject(reason)文檔

    Returns a promise that was already resolved as rejected with the reason.
    返回一個失敗緣由,promise.then()執行失敗回調get

  3. 鏈式調用

    $q.defer()

    返回一個deferred對象

  • resolve(value) – 簡化說明 配置該deferred對象promise的成功調用函數參數
  • reject(reason) – 簡化說明 配置該deferred對象promise的失敗調用函數參數
  • promise - 簡化說明 配置後的promise對象

我的理解說明

鏈式調用內部的默認失敗回調會向後傳遞異常,因此爲避免麻煩,且不在乎每一處的業務邏輯錯誤,不要在每一處then() 處聲明異常處理函數,在最後一個 then()中聲明便可。

promiseX.then(function(){}).then(function(){})

      .then(function(val){},function(reason){})

若是在乎每一處可能出現的業務邏輯錯誤,在回調中return $q.reject();傳遞錯誤.不管執行哪個回調函數,若是內部沒有人爲return $q.reject();,則若沒有執行錯誤,暨返回成功信號。

var deferred = $q.defer();
    deferred.resolve(1);
var promiseA = deferred.promise;
promiseA
   .then(function(val){$log.info(val);return ++val;})
   .then(function(val){$log.info(val);return ++val;})
   .then(
         function(val){$log.info(val);return ++val;},
         function(val){$log.info(val)}
   );

鏈式調用完成後控制檯打印出 1,2,3

var deferred = $q.defer();
    deferred.resolve(1);
var promiseA = deferred.promise;
promiseA
   .then(function(val){$log.info(val);return $q.reject(15);})
   .then(function(val){$log.info(val);return ++val;})
   .then(function(val){$log.info(val);return ++val;})
   .then(function(val){$log.info(val);return ++val;})
   .then(
         function(val){$log.info(val);return ++val;},
         function(val){$log.info(val)}
   );

鏈式調用完成後控制檯打印出 1,15,能夠看出,第一個return $q.reject(15)以後,直到最後一個then()纔有錯誤回調函數,因此異常一直傳遞到最後,中間的幾個then()沒有錯誤回調函數。

$q.when('I Love you!')
    .then(function(value){$log.info(value)});

控制檯打印出I Love you!;

$q.when($q.reject('I Hate you!'))
    .then(null,function(value){$log.info(value)});

控制檯打印出I Hate you!;

var promiseA = $q.when('I Love you!');
 var promiseB = $q.when('Love story!');
 var promiseC = $q.when("Let't get wet!");
 $q.all([promiseA,promiseB,promiseC]).then(function(value){
    value[0].then(function(value){$log.info(value);})
    value[1].then(function(value){$log.info(value);})
    value[2].then(function(value){$log.info(value);})
 })

控制檯打印出I Love you!,Love story!,"Let't get wet!

相關文章
相關標籤/搜索