$q服务——angular
$q是做为angular的一个服务而存在的,只是对promise异步编程模式的一个简化实现版,源码中剔除注释实现代码也就二百多行,下面开始介绍$q的API。
一、defer对象(延迟对象)可以通$q.defer()获取,下面是defer对象的api:
1、方法
——resolve(value):向promise对象异步执行体发送消息告诉他我已经成功完成任务,value即为发送的消息。
——reject(value):向promise对象异步执行体发送消息告诉他我已经不可能完成这个任务了,value即为发送的消息。
——notify(value):向promise对象异步执行体发送消息告诉他我现在任务完成的情况,value即为发送的消息。
这些消息发送完promise会调用现有的回调函数
2、属性
——promise:即与这个defer对象的承诺对象
从上可以看出defer主要是用来发送消息的。
promise对象可以通过defer.promise获取,下面是promise对象的api:
——then(successCallback,errorCallback,notifyCallback):参数为不同消息下的不同回调函数,defer发送不同的消息执行不同的回调函数,消息作为这些回调函数的参数传递。返回值为回一个promise对象为支持链式调用而存在。当第一个defer对象发送消息后,后面的promise对应的defer对象也会发送消息,但是发送的消息不一样,不管第一个defer对象发送的是reject还是resolve,第二个及其以后的都是发送的resolve,消息是可传递的。
——catch(errorCallback):then(null,errorCallback)的缩写。
——finally(callback):相当于then(callback,callback)的缩写,这个finally中的方法不接受参数,却可以将defer发送的消息和消息类型成功传递到下一个then中
二、$q的方法:
——defer():用来生成一个延迟对象 var defer =$q.defer();
——reject():参数接收错误消息,相当于在回调函数中抛出一个异常,然后在下一个then中调用错误的回调函数。
——all():参数接收为一个promise数组,返回一个新的单一promise对象,当这些promise对象对应defer对象全部解决,这个单一promise对象才会解决;当这些promise对象中有一个被reject了,这个单一promise同样的被reject了。
——when():接收第一个参数为一个任意值或者是一个promise对象,其他3个同promise的then方法,返回值为一个promise对象。第一个参数若不是promise对象则直接运行success回调且消息为这个对象,若为promise那么返回的promise其实就是对这个promise类型的参数的一个包装而已,被传入的这个promise对应的defer发送的消息,会被我们when函数返回的promise对象所接收到。
随机推荐
- zencart移站后批量替换数据库中网址、电子邮箱、重置用户密码
-- SEO标签中网址替换 update categories_description set categories_description=replace(categories_descriptio ...
- 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集
<编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...
- js 点击不同li 切换颜色
html <div> <li " onclick='addColor(this.id)'> 会议简介 </li> <li " onclic ...
- C# 计时函数(毫秒)
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading ...
- web前端_DOM操作
DOM(Document Object Model 文档对象模型) 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通过dom对象中j ...
- C# 获取系统信息
public string GetMyOSName() { //获取当前操作系统信息 OperatingSystem MyOS = Envir ...
- react页面跳转
<Button style={{backgroundColor:'#F0F2F5'}} onClick={()=>{window.location.href="https://b ...
- CF1101D GCD Counting 点分治+质因数分解
题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 1 ...
- poj 3625 (最小生成树算法)
Building Roads Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12203 Accepted: 3448 D ...
- FLASH和EEPROM的区别
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低 ...