promise第一篇-简介
1. 创建一个promise对象
var promise = new Promise(function(resolve, reject){
//异步处理
//处理结束后调用resolve或reject
});
2. 设置promise对象在resolve或reject后的回调函数,可以使用promise.then()方法:
promise.then(onFulfilled, onRejected);
onFulfilled和onRejected都是函数,这两个参数均为可选参数。resolve(成功)时,onFulfilled会被调用;reject(失败)时,onRejected会被调用。如果只想对成功的情况进行处理可以采用:
promise.then(onFulfilled);
如果只想对失败的情况进行处理,可以采用:
promise.then(undefined, onRejected);
这种方式只指定reject(失败)时的回调函数,不过这种情况下用catch是一种更好的选择:
promise.catch(onRejected);
3. Promise静态方法(类方法)
Promise是一个构造函数,同时也是一个全局对象,Promise全局对象还拥有一些静态方法,或者说类方法(只能通过Promise调用,而不能通过Promise实例调用),比如Promise.all(),Promise.resolve()等。
4. Promise事例
function asyncFunction(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve("Async Hello World.")
}, 1600);
});
} asyncFunction().then(function(res){
console.log(res);
}).catch(function(error){
console.log(error);
});
执行asyncFunction()函数会返回一个promise对象,该promise对象会在setTimeout之后的1600ms后被resolve。我们可以将promise理解成一个期望,如果该期望调用了resolve()方法,这个期望就被实现了,愿望实现后则会触发该promise对象的then中的onFulfilled函数;同样的,如果该期望调用了reject()方法,这个期望就破灭了,期望破灭后则会触发该promsie对象的then中的onReject函数,或者catch中的onReject函数。
上面用了catch方法,当然也可以不实用catch,只使用then:
function asyncFunction(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve("Async Hello World.")
}, 1600);
});
} asyncFunction().then(function(res){
console.log(res);
}, function(error){
console.log(error);
});
5. Promise的状态
用new Promise实例化的promise对象具有三种状态:Fulfilled,Rejected和Pending。promise对象的状态,从Pending跳转到Fulfilled或者Rejected后,这个promise对象的状态就不会再发生任何变化,也就是说在then中注册的回调函数可以肯定的说只会被调用一次。Fulfilled或者Rejected这两个中的任一状态都可以表示为Settled(不变的)。可见promise的状态跳转是非常简单易懂的。
6. 理解catch
事实上,catch(onRejected)只是then(undefined, onRejected)的别名而已。一般来说使用catch将resolve和reject分开是比较推荐的做法。关于用then和catch的区别,看一下下面的代码:
function throwError(value) {
// 抛出异常
throw new Error(value);
}
// <1> onRejected不会被调用
function badMain(onRejected) {
return Promise.resolve(42).then(throwError, onRejected);
}
// <2> 有异常发生时onRejected会被调用
function goodMain(onRejected) {
return Promise.resolve(42).then(throwError).catch(onRejected);
}
// 运行示例
badMain(function(error){
console.log('bad' + error);
});
goodMain(function(error){
console.log('good' + error);
});
在上面的代码中badMain是一种不太好的实现方式,goodMain则是一种非常好的进行错误处理的版本。事实上,then和catch都会创建并返回一个新的promise对象。promise在方法链中增加一次处理的时候所操作的都是完全不同的promise对象。当然,犹豫catch是then的别名,我们使用then也可以完成同样的工作,只不过用catch意图更明确:
Promise.resolve(42).then(throwError).then(undefined, onRejected);
promise第一篇-简介的更多相关文章
- Python第一篇-简介和入门
简介: Python[1] (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第 ...
- spark第一篇--简介,应用场景和基本原理
摘要: spark的优势:(1)图计算,迭代计算(2)交互式查询计算 spark特点:(1)分布式并行计算框架(2)内存计算,不仅数据加载到内存,中间结果也存储内存 为了满足挖掘分析与交互式实时查询的 ...
- hive第一篇----简介和使用客户端
摘要by crazyhacking:•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能.•本质是将SQL转换为MapReduce程序的映射 ...
- highcharts第一篇---简介和使用
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- 分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)——第一篇
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)--第一篇 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由 ...
- SAP-ABAP系列 第一篇SAP简介
第一篇 SAP简介 SAP全名为System Application and Products in Data Processing.SAP目前是全世界排名第一的RP软件,号称“全球最大的企业管理解决 ...
- 【ABAP系列】SAP ABAP7.40新语法简介第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
- 第一篇 Replication:复制简介
本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...
- 【译】第一篇 Replication:复制简介
本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...
随机推荐
- 美食应用 吃了么 beta 测试报告
为了更好的测试我们应用的兼容性和性能,我们借助了网上的平台Testin云测和百度MTC平台来测试我们的应用,一下是我们的测试结果. 一.兼容性测试 我们对119台终端机器进行了测试,通过测试的有99台 ...
- 转发:C#加密方法汇总
转自:C#加密方法汇总 方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符 ...
- 第三个spring冲刺第10天
进入最后阶段冲刺最后一天了,基本的需求已经完成了,最后的布局问题也解决了,我们的软件正式推出了.
- Particle filter for visual tracking
Kalman Filter Cons: Kalman filtering is inadequate because it is based on the unimodal Gaussian dist ...
- Golang的panic和recover
panic 关键字panic的作用是制造一次宕机,宕机就代表程序运行终止,但是已经“生效”的延迟函数仍会执行(即已经压入栈的defer延迟函数,panic之前的). 为什么要制造宕机呢?是因为宕机不容 ...
- TestNG—学习笔记2
关于TestNG,也是一边学一边总结,对于TestNG和Junit的比较其实也没有什么意义,都是一种测试框架,都是为了应用而生的东西,没有必要说谁好谁不好了.用的熟练用的好就是真的好啊. 下面简单的总 ...
- CENTOS7修改ip
编辑网卡设置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 编辑内容 vi /etc/sysconfig/network-scripts/ificg-en ...
- (二) 关于配置travis-ci持续集成python pytest测试的相关记录
接上篇 上篇只是非常官方的描述了一下travis-ci是包括了些什么部分会如何工作但是并没有深入介绍也没有写demo. 这里先贴上一个我已经测试好了的python_travis-ci的环境 https ...
- appium学习记录1
xpath定位: 语法 driver.find_element_by_xpath("//android.widget.EditText[@index="登陆"/../pr ...
- BZOJ3676 APIO2014回文串(manacher+后缀自动机)
由于本质不同的回文子串数量是O(n)的,考虑在对于每个回文子串在第一次找到它时对其暴力统计.可以发现manacher时若右端点移动则找到了一个新回文串.注意这样会漏掉串长为1的情况,特判一下. 现在问 ...