全网整合营销服务商

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

免费咨询热线: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 


相关文章: 车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何通过虚拟主机快速完成网站搭建?  如何快速查询域名建站关键信息?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何快速搭建虚拟主机网站?新手必看指南  高端智能建站公司优选:品牌定制与SEO优化一站式服务  h5网站制作工具有哪些,h5页面制作工具有哪些?  如何在云主机快速搭建网站站点?  建站之星安装需要哪些步骤及注意事项?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何在阿里云ECS服务器部署织梦CMS网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何配置WinSCP新建站点的密钥验证步骤?  如何挑选最适合建站的高性能VPS主机?  建站之星3.0如何解决常见操作问题?  建站与域名管理如何高效结合?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何基于云服务器快速搭建个人网站?  如何配置FTP站点权限与安全设置?  如何设置并定期更换建站之星安全管理员密码?  制作网页的网站有哪些,电脑上怎么做网页?  详解jQuery中基本的动画方法  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  大连网站设计制作招聘信息,大连投诉网站有哪些?  html制作网站的步骤有哪些,iapp如何添加网页?  如何正确下载安装西数主机建站助手?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  装修招标网站设计制作流程,装修招标流程?  盐城做公司网站,江苏电子版退休证办理流程?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何快速搭建支持数据库操作的智能建站平台?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何通过cPanel快速搭建网站?  代购小票制作网站有哪些,购物小票的简要说明?  高性价比服务器租赁——企业级配置与24小时运维服务  实惠建站价格推荐:2025年高性价比自助建站套餐解析  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  建站主机服务器选购指南:轻量应用与VPS配置解析  寿县云建站:智能SEO优化与多行业模板快速上线指南  C#如何在一个XML文件中查找并替换文本内容  宿州网站制作公司兴策,安徽省低保查询网站?  建站之星安装模板失败:服务器环境不兼容?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  已有域名建站全流程解析:网站搭建步骤与建站工具选择 

您的项目需求

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