$q的一共有四个api:

1.$q.when(value, successFn, errorFn, progressFn),返回值为一个promise对象

--value可以是一个任意数据,也可以是一个promise对象:

如果是任意数据的情况,则直接调用successFn的函数,所以后两个参数没有写的意义。
var a=$q.when(“something”,function(data){ console.log(data) //something
  return data;
})
a.then(function(data){
console.log(data) //something这里的值取决于successFn的返回值,如果没有返回值,则这个值为undefined
})
 如果是promise的情况
var a=$q.when("apple"); //a是一个promise对象
$q.when(a,function(data){
console.log(data) //apple 这个值跟a这个promise对象的then方法中successFn,errorFn,processFn的入参一一对应
})

2,$q.reject(reason),返回值为一个promise对象

 var a=$q.reject("no happy")  //a为一个promise 对象
a.then(function(data){
console.log(data) //根本无任何意义
},function(data){
console.log(data) // no happy
})
因为reject 只会触发errorFn这个函数,所以以上方法也可以这么写:
var a=$q.reject("no happy") //a为一个promise 对象
a.catch(function(data){
console.log(data) //no happy
})
备注:如果传入的不是"no happy",而是一个promise对象,那么
a.catch(function(data){
console.log(data) //data为a
a.catch(function(data){
console.log(data) // no happy
})
})

备注:$q.reject跟$q.when对比,返回的promise对象的then方法中被触发函数的入参,前者取决于$q.reject(value)的value,后者取决于$q.when()的第二三四个参数(函数)的返回值。

3.$q.all([promise1, promise1]) 接受一个包含若干个 promise 的数组,返回一个promise对象,返回的promise的progressFn并没有用;

等所有的promise resolve后,其本身resolve包含上述结果的数组[data1,data2]

var a=$q.when("hello");
var b=$q.when("world");
$q.all([a,b]).then(function(data){
console.log(data) //["hello","world"]
})

如果上述 promise 有一个 reject, 那么$q.all() 会把这个 rejected promise 作为其 rejected promise (只有一个哦)

var a=$q.when(“hello”);
var b=$q.reject("world");
$q.all([a,b]).then(function(data){
console.log(data) //没有任何意义
},function(data){
console.log(data) //world
})

4.$q.deffer()  返回一个deferred对象。

这个用的比较普遍,不多说了

angular中的$q服务的更多相关文章

  1. angular中的$q服务实例

    用于理解$q服务 参考:http://www.zouyesheng.com/angular.html#toc39 广义回调管理 和其它框架一样, ng 提供了广义的异步回调管理的机制. $http 服 ...

  2. 形象的讲解angular中的$q与promise(转)

    以下内容摘自http://www.ngnice.com/posts/126ee9cf6ddb68 promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多. ...

  3. 原创:形象的讲解angular中的$q与promise

    promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多.promise全称是 Futures and promises.具体的可以参见 http://en ...

  4. angular中的$q.defer()服务异步处理

    jquery和angular都有defer服务,我暂以angular为例谈谈我的理解,最后并附上jquery的阮一峰总结的defer. 以我目前项目的部分代码为例说明为什么要用deferred. fu ...

  5. promise和Angular中的 $q, defer

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

  6. Angular中的$q的形象解释及深入用法

    作者:寸志链接:https://zhuanlan.zhihu.com/p/19622332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 早上,老爸说:“儿子,天气如何 ...

  7. angular中的$http服务

    $http是ng内置的一个服务.是简单的封装了浏览器原生的XMLHttpRequest对象. 写法1 $http({ method: "GET", url: 'data.json' ...

  8. angular学习笔记(二十九)-$q服务

    angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构 ...

  9. angular的$q服务和promise模式

    此承诺/延迟(promise/deferred)实现的灵感来自于 Kris Kowal's Q CommonJS Promise建议文档 将承诺(promise) 作为和 异步执行操作(action) ...

随机推荐

  1. mysql的下载地址+Download WinMD5

    http://dev.mysql.com/downloads/mysql http://www.nullriver.com/products

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(83)-Easyui Datagrid 行内编辑扩展

    这次我们要从复杂的交互入手来说明一些用法,这才能让系统做出更加复杂的业务,上一节讲述了Datagird的批量编辑和提交本节主要演示扩展Datagrid行内编辑的属性,下面来看一个例子,我开启编辑行的时 ...

  3. kobo阅读器安装koreader

    动机 kobo阅读器是加拿大的电子阅读器品牌,与kindle类似.问题是这个阅读器在中国无法连接电子书商店,即使是用SS翻出去也不行.一气之下花了一个下午折腾,安装一个开源的阅读器. 安装 代码仓库在 ...

  4. 【wannacry病毒之暗网】-如何访问"暗网"(慎入)

    心里能力不强的人,请别看. 有些事情还是不要接触比较好, 社会最恶一面不是随随便便就能接触到的, 也不是你能理解的 你想要用暗网做什么是你考虑的一个问题 什么是暗网? 所谓的"暗网" ...

  5. numpy之索引和切片

    索引和切片 一维数组 一维数组很简单,基本和列表一致. 它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改). 这也意味着,如果不想更改原始数组,我们需要进行显式的复制 ...

  6. JBoss 主要模块

    JBoss EJB 容器是JBoss 服务器的核心实现.它有两个特征,第一个是在运行期间生产EJB对象的Stub 和Skeleton 类, 第二是支持热部署. JBossNS 是JBoss 命名服务用 ...

  7. TCP/UDP客户端

    Python 网络编程----模块socekt 在渗透测试的过程中,经常会遇到需要创建一个TCP客户端来连接服务器.发送垃圾数据.进行模糊测试活进行其他任务的情况. 简单的TCP客户端代码: #!/u ...

  8. JVM类加载以及执行的实战

    前几篇文章主要是去理解JVM类加载的原理和应用,这一回讲一个可以自己动手的例子,希望能从头到尾的理解类加载以及执行的整个过程. 这个例子是从周志明的著作<深入理解Java虚拟机>第9章里抄 ...

  9. nodejs集成sqlite

    正在物色node上面的轻量级嵌入式数据库,作为嵌入式数据库的代表,sqlite无疑是个理想的选择方案.npm上集成sqlite的库主要有两个——sqlite3和realm. realm是一个理想的选择 ...

  10. Java IO流之普通文件流和随机读写流区别

    普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...