全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

AngularJS中的promise用法分析

本文实例讲述了AngularJS中的promise用法。分享给大家供大家参考,具体如下:

JavaScript异步回调有好处也有坏处,回调函数大量嵌套十分复杂.所以javascript中还有另一种异步处理模式叫promises.在AngularJS中的实现就是$q服务.

下面是一些小例子.

then,catch,finally

在链最后的 catch 为整个链式处理提供一个异常处理点
在链最后的 finally 总是会被执行,不管 promise 被处理或者被拒绝,起清理作用

<!DOCTYPE html>
<html>
  <head>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
    <script src="jQuery.min.js"></script>
    <script src="angular.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script type="text/javascript">
      var myapp = angular.module('myapp', []);
      myapp.controller('myController', function($scope, $q) {
        $scope.send = function() {
          var deferred = $q.defer();
          var promise = deferred.promise;
          promise
          .then(function() {
            console.log('resolve.....')
          }, function() {
            console.log('reject.....');
          }, function() {
            console.log('notify.....');
          })
          .catch(function() {
            console.log('catch..error..')
          })
          .finally(function() {
            console.log('anywhere will be called..');
          });
          deferred.reject('resolve');
        };
      });
    </script>
    <style type="text/css">
    </style>
  </head>
  <body ng-app="myapp">
    <div ng-controller="myController">
        <button class="btn" ng-click="send()">click</button>
    </div>
  </body>
</html>

then第三个参数(表征状态)的应用

<!DOCTYPE html>
<html>
  <head>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
    <script src="jquery.min.js"></script>
    <script src="angular.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script type="text/javascript">
      var myapp = angular.module('myapp', []);
      myapp.controller('myController', function($scope, dataService) {
        $scope.send = function() {
          dataService.getData()
          .then(function success(data) {
            console.log(data);
          }, function error(error) {
            console.log(error);
          }, function status(process) {
            console.log(process);
          });
        };
      });
      myapp.factory('dataService', function($q, $interval) {
        return {
          getData : function() {
            var deferred = $q.defer();
            var process = 0;
            var interval = $interval(function() {
              process += 10;
              deferred.notify(process);
              //reject之后不再继续运行
              // if (process == 50) {
              //   deferred.reject(process);
              // }
              if (process >= 100) {
                $interval.cancel(interval);
                deferred.resolve(process);
              }
            }, 1000);
            return deferred.promise;
          }
        };
      });
    </script>
    <style type="text/css">
    </style>
  </head>
  <body ng-app="myapp">
    <div ng-controller="myController">
        <button class="btn" ng-click="send()">click</button>
    </div>
  </body>
</html>

then链式

<!DOCTYPE html>
<html>
  <head>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
    <script src="jquery.min.js"></script>
    <script src="angular.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script type="text/javascript">
      var myapp = angular.module('myapp', []);
      myapp.controller('myController', function($scope, $q) {
        $scope.send = function() {
          var deferred = $q.defer();
          var promise = deferred.promise;
          promise
          .then(function() {
            console.log('1.....')
          })
          .then(function() {
            console.log('2....');
          });
          deferred.resolve('resolve');
        };
      });
    </script>
    <style type="text/css">
    </style>
  </head>
  <body ng-app="myapp">
    <div ng-controller="myController">
        <button class="btn" ng-click="send()">click</button>
    </div>
  </body>
</html>

then链会把上一个 then 的返回结果传递给调用链的下一个 then (如果没有就是 undefined).

<!DOCTYPE html>
<html>
  <head>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
    <script src="jquery.min.js"></script>
    <script src="angular.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script type="text/javascript">
      var myapp = angular.module('myapp', []);
      myapp.controller('myController', function($scope, $q, $timeout) {
        $scope.send = function() {
          var deferred = $q.defer();
          var promise = deferred.promise;
          deferred.resolve('resolve');
          promise
          .then(function(data) {
            console.log(data);
            var _deferred = $q.defer();
            $timeout(function() {
            _deferred.resolve('resolve_');
            }, 1000);
            return _deferred.promise;
          })
          .then(function(data) {
            console.log(data);
          });
        };
      });
    </script>
    <style type="text/css">
    </style>
  </head>
  <body ng-app="myapp">
    <div ng-controller="myController">
        <button class="btn" ng-click="send()">click</button>
    </div>
  </body>
</html>

如果 then 返回一个 promise 对象,下一个 then 只会在这个 promise 被处理结束的时候调用。

更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》

希望本文所述对大家AngularJS程序设计有所帮助。


# AngularJS  # promise  # AngularJS中update两次出现$promise属性无法识别的解决方法  # AngularJS中的Promise详细介绍及实例代码  # AngularJS 中的Promise --- $q服务详解  # 详解Javacript和AngularJS中的Promises  # AngularJS中处理多个promise的方式  # Angularjs Promise实例详解  # 链式  # 回调  # 进阶  # 也有  # 相关内容  # 在这个  # 感兴趣  # 只会  # 给大家  # 如果没有  # 会把  # 第三个  # 提供一个  # 更多关于  # 所述  # 程序设计  # 被拒  # 操作技巧  # 讲述了  # device 


相关文章: 如何在万网主机上快速搭建网站?  网站图片在线制作软件,怎么在图片上做链接?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  制作企业网站建设方案,怎样建设一个公司网站?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  宝塔新建站点报错如何解决?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何通过建站之星自助学习解决操作问题?  建站之星与建站宝盒如何选择最佳方案?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  建站之星后台密码如何安全设置与找回?  如何选择网络建站服务器?高效建站必看指南  公司网站制作需要多少钱,找人做公司网站需要多少钱?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何在阿里云高效完成企业建站全流程?  如何通过cPanel快速搭建网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  设计网站制作公司有哪些,制作网页教程?  高防服务器租用首荐平台,企业级优惠套餐快速部署  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  黑客如何通过漏洞一步步攻陷网站服务器?  专业网站建设制作报价,网页设计制作要考什么证?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  已有域名和空间如何搭建网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  太原网站制作公司有哪些,网约车营运证查询官网?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  如何快速搭建FTP站点实现文件共享?  清除minerd进程的简单方法  建站之星图片链接生成指南:自助建站与智能设计教程  建站之星收费标准详解:套餐费用及年费价格表一览  如何通过西部建站助手安装IIS服务器?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何快速建站并高效导出源代码?  如何通过NAT技术实现内网高效建站?  如何在自有机房高效搭建专业网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何快速生成高效建站系统源代码? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。