浅谈angular中的promise
promise目的就是为了跳出回调地狱.老掉牙的东西,大神轻拍.
举个最简单的例子:请求数据(getData),解析数据(executeData),显示数据(showData).
//获取数据
function getData(callback){
callback && callback();
} //解析数据
function executeData(callback){
callback && callback();
} //显示数据
function showData(callback){
callback && callback();
} //开始请求数据了
getData(function(){
executeData(function(){
showData(function(){
console.log("data showed");
})
})
})
传统做法就是这样,当然也可以通过事件机制实现。事件机制相比于回调,回调是一对一,事件机制就是一对多。但是,缺点就是代码极难阅读,尤其是混淆了复杂的业务逻辑,写代码注释都很难补救。
这时候promise出场了.
//获取数据
function getData(){
var deferred = $q.defer();//创建一个延迟
//do something
setTimeout(function(){
deferred.resolve(); //延迟执行完毕,没问题啊
},1000);
return deferred.promise;//返回promise,我给你个承诺,你等着
} //解析数据
function executeData(type){
var deferred = $q.defer();
//do something
setTimeout(function(){
deferred.reject();//出事了,数据不对
},1000);
return deferred.promise;
} //显示数据
function showData(){
var deferred = $q.defer();
//do something
deferred.notify();//持续发送消息,gogogogo,用来更新进度什么的
return deferred.promise;
}
//马上帅多了
getData()
.then(executeData.bind(window,["test"]))//通过bind修改参数
.then(showData)
.catch(function(){ //中途运行deferred.reject的话,就触发catch
console.log("error");
})
.finally(function(){ //全部执行完就finally
console.log(end);
});
上面注释相信写得很清楚了。可以使用bind自定义参数。还有$q.all([promise1,promise2,promise3])可以同时执行多个promise,跟执行顺序跟上面有区别。
为什么叫做$q,$q的全称是什么,知道的请@死我。
浅谈angular中的promise的更多相关文章
- 通过一道笔试题浅谈javascript中的promise对象
因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈iOS中的userAgent
浅谈iOS中的userAgent User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
随机推荐
- Java操作PDF之iText超入门
iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. http://itextpdf.c ...
- HTTP权威指南-HTTP概述
1.web服务器(HTTP服务器)使用的是HTTP协议,存储了因特网中的数据,当客户端发出请求时,服务器提供相应的数据.HTTP客户端和HTTP服务器共同构成了万维网的基本组件. 2.资源:Web服务 ...
- python爬虫从入门到放弃(三)之 Urllib库的基本使用
官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.r ...
- R语言 模糊c均值(FCM)算法程序(转)
FCM <- function(x, K, mybeta = 2, nstart = 1, iter_max = 100, eps = 1e-06) { ## FCM ## INPUTS ## ...
- Assert与内存泄漏
以前知道C/C++有assert之后,我想知道assert会不会造成内存泄漏,于是我做了一个测试: #include <iostream> #include <fstream> ...
- JavaSE教程-03Java中分支语句与四种进制转换
一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...
- javaSE_05Java中方法(函数)与重载、递归
1.方法的声明和调用 什么是方法?为什么需要方法?代码复用,方便软件升级 什么是方法? 具备特定功能的一段独立的代码段 标准的方法格式:(注意格式的顺序) 修饰符 返回值类型 方法名(参数类型 参数名 ...
- 深入探索C++对象模型(三)
Data 语义学 一个class的data members,一般而言,可以表现这个class在程序执行时的某种状态.Nonstatic data members放置的是"个别的class o ...
- css3的学习
已经学习css3一个月了,通过对css3的深入学习,我对网页设计的理解就更深刻了,以前只会用简单的图片,定位等来制作网页,现在可以运用css3扩展的新内容来写出更好看的网页. css3扩展内容中,我认 ...
- 网购的一套UI代码的始末
引言: 一个商业项目的需要,又因为时间紧迫的关系,准备购买一套简洁,易用,可定制化强的UI,经过对国内外多家UI产品进行了对比, 包括:FineUI, EasyUI, EXT.NET, EXTJS, ...