zoukankan      html  css  js  c++  java
  • angular的$q,defer,promise

    $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常)。

    官网:http://docs.angularjs.cn/api/ng/service/$q

    defer是延迟的意思, $q.defer()可以创建一个deferred实例(延迟对象实例)。

    var defer=$q.defer();

    defer有三个方法:resolve,reject,notify,一个属性:promise

    function asyncGreet(name) {
      var deferred = $q.defer();  //通过$q.defer()创建一个deferred延迟对象,在创建一个deferred实例时,也会创建出来一个派生的promise对象,使用deferred.promise就可以检索到派生的promise。
    
      deferred.notify('About to greet ' + name + '.');  //延迟对象的notify方法。
    
      if (okToGreet(name)) {
        deferred.resolve('Hello, ' + name + '!');  //任务被成功执行
      } else {
        deferred.reject('Greeting ' + name + ' is not allowed.');  //任务未被成功执行
      }
    
      return deferred.promise;  //返回deferred实例的promise对象
    }

    promise 对象的目的是在 deferred 任务完成时,允许感兴趣的部分取得其执行结果。

    function asyncGreet(name) {
      var deferred = $q.defer();  //通过$q.defer()创建一个deferred延迟对象,在创建一个deferred实例时,也会创建出来一个派生的promise对象,使用deferred.promise就可以检索到派生的promise。
    
      deferred.notify('About to greet ' + name + '.');  //延迟对象的notify方法。
    
      if (okToGreet(name)) {
        deferred.resolve('Hello, ' + name + '!');  //任务被成功执行
      } else {
        deferred.reject('Greeting ' + name + ' is not allowed.');  //任务未被成功执行
      }
    
      return deferred.promise;  //返回deferred实例的promise对象
    }
    
    function okToGreet(name) {
      //只是mock数据,实际情况将根据相关业务实现代码
      if(name == 'Superman') return true;  
      else return false;
    }
    
    var promise = asyncGreet('Superman');  //获得promise对象
    //promise对象的then函数会获得当前任务也就是当前deferred延迟实例的执行状态。它的三个回调函数分别会在resolve(), reject() 和notify()时被执行
    promise.then(function(greeting) {
      alert('Success: ' + greeting);
    }, function(reason) {
      alert('Failed: ' + reason);
    }, function(update) {
      alert('Got notification: ' + update);
    });

    可参考:

    http://www.tuicool.com/articles/FfaA7bu

    http://blog.csdn.net/renfufei/article/details/19174015

    http://blog.csdn.net/lglgsy456/article/details/32335127

    http://docs.angularjs.cn/api/ng/service/$q

  • 相关阅读:
    Three.js黑暗中的萤火虫
    Three.js会飞走飞回来的鸟
    Three.js响应和移动物体
    Three.js加载gltf模型
    Three.js创建运动立体几何体示例
    activemq artemis安装运行及其在springboot中的使用
    activemq安装运行及其在springboot中的queue和topic使用
    springboot成神之——mybatis和mybatis-generator
    java成神之——安全和密码
    java成神之——网络编程基本操作
  • 原文地址:https://www.cnblogs.com/simonbaker/p/5220054.html
Copyright © 2011-2022 走看看