一、概念解释

  全称是未来与承诺,Futures and promises,是一种编程模式,不是AngularJS首创。javascript里有个流行库Q,而AngularJS是$q,其就是从Q引入的;解决异步编程问题。是一种长时间运行而且不一定必须完成的操作结果,不会阻塞和等待长时间的操作完成,而是直接返回一个代表承诺的结果的对象,它实现一种叫then的方法,用来注册完成和拒绝时候得回调函数,如then(resovedHandler, rejectedHandler),Promise在任何时刻都处于三种状态之一:未完成(pending),已完成(resolved),拒绝(rejected)。

  通过下边过程形象的解释下Promise过程:

  1、发起延期请求   var deferred = $q.defer()     如 张先生对家具厂说:“我需要一个衣柜,回头做好给我送来”   延期送来就行而不是现在需要。

  2、承诺 var promise  = deferred.promise   如 家具厂对张先生说:“我们做好了会给你送过去的,放心吧”,并给他留了个回执号。

  3、张先生把这件事记录在日记上,同事记录了回执号,即创建了一个延期事件 deferred;此时张先生去做其他事情,不用管这个事情了,即异步请求。

  4、问题解决 deferred.resolve(衣柜)  如 家具厂做完衣柜,并如约送到张先生家,也就是“问题已经解决,这是您的衣柜”。这个时候,张先生只要取出“衣柜”这个”参数”就行了。

  5、问题拒绝 deferred.reject(理由) 如 家具厂评估了这个衣柜的规格后做不了,就会张先生说:“因为.....我们做不了这个衣柜”  。

  6、存货 $q.when(现有衣柜)  张先生不管家具厂是重头做起还是用现成品,只要达到品质要求就行。

  7、进展情况 deferred.notify(进展情况) 家具厂可能格外细心,给张先生发送进展情况。

  另外,一次性多个承诺 $q.all([桌子承诺,椅子承诺,席梦思承诺]); 三个承诺都完成后,再一次性签收所有承诺。

  

二、例子

  定义一个服务:

  

  控制器中调用:

  

AngularJS 承诺 Promise的更多相关文章

  1. 给你一个承诺 - 玩转 AngularJS 的 Promise(转)

    在谈论Promise之前我们要了解一下一些额外的知识:我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个任务完成后才可 ...

  2. 【给你一个承诺 - 玩转 AngularJS 的 Promise】

    了解Promise 在谈论Promise之前我们要了解一下一些额外的知识:我们知道JavaScript语言的执行环境是"单线程",所谓单线程,就是一次只能够执行一个任务,如果有多个 ...

  3. AngularJs $q promise

    angularjs提供的$q服务是对Promises规范的一个实现.$q服务可以把一段异步的代码封装成同步的样式. 为啥是样式,因为异步还是异步,它并不会柱塞代码,只是看起来像同步代码. $q.whe ...

  4. 深入探索AngularJS(持续更新)

    数据双向绑定并不是Angular最出彩的地方.大部分对AngularJs的介绍都偏重于使用,使用的学习只是学了AngularJs的API,而那只能AngularJs的很小一部分.随着使用越来越深,系统 ...

  5. promise和Angular中的 $q, defer

    在ES6语法中,新出了promise构造函数, 可用来生成promise实例. Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作).有了promise对象, 可以将异步操作以同步 ...

  6. 深入探索AngularJS

    目录 深入探索AngularJS 作用域Scope是DOM和Directives交互的抽象 Scope是POJO对象 Scope是上下文 Scope继承树 Scope附加功能 正交功能 Element ...

  7. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

  8. $q -- AngularJS中的服务(理解)

      描述 译者注: 看到了一篇非常好的文章,如果你有兴趣,可以查看: Promises与Javascript异步编程 , 里面对Promises规范和使用情景,好处讲的非常好透彻,个人觉得简单易懂. ...

  9. [译]AngularJS sercies - 获取后端数据

    原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...

随机推荐

  1. Java Http协议处理类

    public class HttpRequest { public static String doGet(String url,String params) throws Exception{ re ...

  2. 厉害了,PS大神真的能改变世界!

    今天要介绍的这位PS大神 名叫 Katrina Yu 她的操作真的神了 不管多普通的场景 她都能帮你改头换面 在后院破旧的椅子上喝着咖啡 一转眼就骑着魔法扫帚 飞上了天,与月亮肩并肩 看原图还以为是在 ...

  3. MySQL表的相关操作

    操作数据表之前,必须先选择相应数据表所在的数据库 mysql> USE databaseName; -- 选择数据库 查看该数据库下的数据表 mysql> show tables; 确定数 ...

  4. powershell上传证书

    https://www.cnblogs.com/threestone/p/4001632.html powershell上传证书

  5. Flex labelFunction 用法

    <mx:VBox horizontalAlign="left" height="100%" width="100%"> < ...

  6. jvm运行机制和volatile关键字详解

    参考https://www.cnblogs.com/dolphin0520/p/3920373.html JVM启动流程 1.java虚拟机启动的命令是通过java +xxx(类名,这个类中要有mai ...

  7. 第一个C#语言

    第一个C#程序 .NET和C#的区别 1.  C#只是.NET的一部分,.NET不止包含C# 2.  C#是一种程序语言,.NET是一个平台.框架 IDE环境:vs 2012 VS2012的窗口结构 ...

  8. 796. Rotate String

    class Solution { public: bool rotateString(string A, string B) { if(A.length()==B.length()&& ...

  9. java保存繁体字到数据库时就报错Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1

    问题分析 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题 ...

  10. 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)

    传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn​表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...