zoukankan      html  css  js  c++  java
  • 这篇讲angular 的$q的讲得不错

    原文: https://segmentfault.com/a/1190000000402555

    ------------------------------------------------------

    方法简介

    $q service 四个方法函数 , 按照个人理解划分为三类。

    1. 非链式调用

      $q.when(value)

      Returns a promise of the passed value or promise
      传递变量值,promise.then()执行成功回调

      $q.all(promises)

      Combines multiple promises into a single promise that is resolved when all of the input promises are resolved.
      多个promise必须执行成功,才能执行成功回调,传递值为数组或哈希值,数组中每个值为与Index对应的promise对象。

    2. 错误信息传递

      $q.reject(reason)

      Returns a promise that was already resolved as rejected with the reason.
      返回一个失败原因,promise.then()执行失败回调

    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!

  • 相关阅读:
    《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
    网络监控工具 iftop dstat
    可进行组合的枚举
    查看Qt自带的QSS
    通过文件设置QSS
    QString转QByteArray
    error: jump to case label
    error: static member function cannot have cv-qualifier
    C++ std::vector的大小和容量
    获取QMessageBox返回值
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7834936.html
Copyright © 2011-2022 走看看