$q的基本用法

function fn() {
var defer = $q.defer();
setTimeout(function () {
console.log(1);
defer.resolve(6);
}, 2000);
return defer.promise;
} fn().then(function (data) {
console.log(data); //2000ms后打印6
}).catch(function (err) {
console.error(err);
});
//或者用$q.when(fn()), 和上面是同样的效果
$q.when(fn()).then(function (data) {
console.log(data);
}).catch(function (err) {
console.error(err);
});

$q多个promise串行

function f1() {
var defer = $q.defer();
setTimeout(function() {
defer.resolve(1);
}, 2000);
return defer.promise;
} function f2() {
var defer = $q.defer();
setTimeout(function() {
defer.resolve(2);
}, 2000);
return defer.promise;
} function f3() {
var defer = $q.defer();
setTimeout(function() {
defer.resolve(3);
}, 2000);
return defer.promise;
} //f1进行完,在进行f2,然后进行f3,后一个程序等待前一个完成
f1().then(function (data) {
console.log(data); // 2s后打印1
return f2();
}).then(function (data) {
console.log(data); // 再过2s后打印2
return f3();
}).then(function (data) {
console.log(data);  // 再过2s后打印3
});

$q.all

$q.all是用于执行多个异步任务进行回调,它可以接受一个promise的数组,或是promise的hash(object)。任何一个promise失败,都会导致整个任务的失败。

$q.all中接收多个promise是同时进行的。

例1:接受一个promise的hash(object):

<!DOCTYPE html>
<html ng-app="app">
<head>
<title></title>
<script src="//cdn.bootcss.com/angular.js/1.5.8/angular.min.js"></script>
</head>
<body>
<div ng-controller="ctrl1">
</div>
<script>
var app = angular.module('app',[]);
app.controller('ctrl1',['$scope','$q',function($scope,$q){
var deferA = $q.defer();
setTimeout(function(){
deferA.resolve('this is DATA A')
},500);
var deferB = $q.defer();
setTimeout(function(){
deferB.resolve('this is DATA B');
},1000);
var p=$q.all({
dataA:deferA.promise,
dataB:deferB.promise
})
p.then(function(result){
console.log(result.dataA); // this is DATA A
console.log(result.dataB); // this is DATA B
})
.catch(function(error){
console.error(error);
})
}]) </script>
</body>
</html>

例2:接受一个promise数组:

<!DOCTYPE html>
<html ng-app="app">
<head>
<title></title>
<script src="//cdn.bootcss.com/angular.js/1.5.8/angular.min.js"></script>
</head>
<body>
<div ng-controller="ctrl1">
</div>
<script>
var app = angular.module('app',[]);
app.controller('ctrl1',['$scope','$q',function($scope,$q){
var deferA = $q.defer();
setTimeout(function(){
deferA.resolve('this is DATA A')
},500);
var deferB = $q.defer();
setTimeout(function(){
deferB.resolve('this is DATA B');
},1000);
var p=$q.all([
deferA.promise,
deferB.promise
]);
p.then(function(result){
console.log(result[0]); // this is DATA A
console.log(result[1]); // this is DATA B
})
.catch(function(error){
console.error(error);
})
}]) </script>
</body>
</html>

参考:http://blog.csdn.net/shidaping/article/details/52398925

angular中$q.all用法的更多相关文章

  1. angular promise $q 异步调用

    Angular异步调用 Promise和$q的用法 背景 首先说明一下promise异步调用出现的背景: javascript语言是一种单线程模式,就是说一次只能够执行一个任务,如果有多个任务的话就必 ...

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

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

  3. angular中$q用法, $q多个promise串行/同步/等待), $q.all用法,使用

    $q的基本用法 function fn() { var defer = $q.defer(); setTimeout(function () { console.log(1); defer.resol ...

  4. Angular JS中 Promise用法

    一.Promise形象讲解A promise不是angular首创的,作为一种编程模式,它出现在1976年,比js还要古老得多.promise全称是 Futures and promises. 而在j ...

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

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

  6. Angular通信$q服务和promise对象

    promise 约定(promise)是一个对象,表示在未来时间点会发生的某件事情,约定可以是三种状态之一:等待.完成或拒绝.约定将从等待状态开始,然后可以转换为完成或者拒绝状态,一旦约定完成或者被拒 ...

  7. Angular @HostBinding()和@HostListener()用法

    @HostBinding()和@HostListener()在自定义指令时非常有用.@HostBinding()可以为指令的宿主元素添加类.样式.属性等,而@HostListener()可以监听宿主元 ...

  8. promise在angular中的基本使用

    promise在angular中的基本使用 <!DOCTYPE html> <html ng-app="myApp"> <head> <m ...

  9. angular的$q,defer,promise

    $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 官网:http://docs.angularjs.cn/api/ng/servi ...

随机推荐

  1. 使用Nginx实现灰度发布

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...

  2. PH日期格式化

    %M 月名字(January--December) %W 星期名字(Sunday--Saturday) %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等.) %Y 年, 数字, 4 位 ...

  3. PHP系统左侧菜单栏的管理与实现

    在日常的开发工作中,面对后台的日益增长的业务,以及后期业务的迭代开发,通常会选择添加菜单栏的形式来扩充业务功能,同样日益增长的后台菜单选项也为我们后期的维护,产生了一定的困难性.为此我总结出自己关于左 ...

  4. python并发编程之线程(一):线程&守护线程&全局解释器锁

      一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.pyth ...

  5. STAThread 和 MTAThread

    STAThread:single threaded apartment 直译过来是:单线程单元套间 MTAThread:multiple threaded apartment 直译过来是:多线程单元套 ...

  6. thinkPHP替换SQL变量

    使用tp里M()->where(pb_id=%d and course=%d and DATE_FORMAT(pub_time, \"%H:%i:%s\") < &qu ...

  7. vue——安装并新建项目

    一.对于vue的安装: 1.安装vue之前先安装node,https://nodejs.org/zh-cn/download/,我装的是windows64位的: 2.下载好了之后就可以按照正常顺序安装 ...

  8. Mysql主从复制_模式之日志点复制

    MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志. 每个从服务器从主服务器接收主服务器已经记 ...

  9. Samba服务器的安装与配置

    Samba服务器主要的功能是实现本地windows系统下方便读写局域网内虚拟机下的文件: Samba与window连接需要使用NetBIOS协议,请确认你的Windows系统已经安装了NetBIOS协 ...

  10. clearstatcache

    clearstatcache clearstatcache — 清除文件状态缓存 void clearstatcache ([ bool $clear_realpath_cache = false [ ...