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第一篇-简介的更多相关文章

  1. Python第一篇-简介和入门

    简介: Python[1]  (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第 ...

  2. spark第一篇--简介,应用场景和基本原理

    摘要: spark的优势:(1)图计算,迭代计算(2)交互式查询计算 spark特点:(1)分布式并行计算框架(2)内存计算,不仅数据加载到内存,中间结果也存储内存 为了满足挖掘分析与交互式实时查询的 ...

  3. hive第一篇----简介和使用客户端

    摘要by crazyhacking:•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能.•本质是将SQL转换为MapReduce程序的映射 ...

  4. highcharts第一篇---简介和使用

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...

  5. 分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)——第一篇

    分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)--第一篇 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由 ...

  6. SAP-ABAP系列 第一篇SAP简介

    第一篇 SAP简介 SAP全名为System Application and Products in Data Processing.SAP目前是全世界排名第一的RP软件,号称“全球最大的企业管理解决 ...

  7. 【ABAP系列】SAP ABAP7.40新语法简介第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...

  8. 第一篇 Replication:复制简介

    本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...

  9. 【译】第一篇 Replication:复制简介

    本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...

随机推荐

  1. VS2013安装和单元测试

    1. VC2013安装过程及使用感受 刚上大一的时候老师推荐我们用VC++6.0.当时也就听了老师的话用VC++6.0编程了一段时间.后来上了大二买了电脑VC++6.0支持不了WIN8.1所以我就开始 ...

  2. 个人博客作业Week2(9月30日)

    一.是否需要有代码规范 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 这些规范并不是一开始就有的,也不是由某个人规定的,代码规范是程序员们在不断地编程实践过 ...

  3. [2019BUAA软件工程]第1次阅读作业

    [2019BUAA软件工程]第1次阅读作业 Tips Link 作业连接 [2019BUAA软件工程]第1次阅读作业 读<构建之法>的疑惑 个人开发流程(Personal Software ...

  4. nginx+tpmcat+redis实现session共享

    nginx+tpmcat+redis实现session共享 版本:nginx nginx-1.8.0.tar.gztomcat apache-tomcat-7.0.78.tar.gzredis  re ...

  5. Centos wget命令 not found解决方法

    如果已经有了yun源,则可通过yun源命令来安装wget. 如下所示: 2.yum安装yum -y install wget 即可安装:

  6. CS、IP和PC寄存器

    CS寄存器和IP寄存器: 首先强调一下,这两个寄存器非常非常重要,CS的全拼为“Code segment”,即代码段寄存器,对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址) ...

  7. 简单FTP服务器搭建

    1 配置IIS 打开控制面板-卸载程序-点击 打开或关闭windows功能-勾选 internet信息服务-确定 2 配置iis web站点 开始菜单-搜索iis并进入iis管理器(计算机-右键-管理 ...

  8. html5應用緩存

    HTML5使用了應用緩存,就是web應用緩存,使得在離線狀態下可以訪問web'應用. 應用緩存的優點: 離線訪問-可以在無網的狀態下訪問應用 速度-有緩存的應用加載更快 瀏覽器負載-瀏覽器只從服務器加 ...

  9. html 類 class

    為html元素設置類,相同的類使用相同的樣式.一般元素都能使用,可以在<div>和<span>中使用,同一個class可以被個<div>或<span>使 ...

  10. Hadoop 入门

    我看过的比较全的文章.赞一下 原文链接:http://www.aboutyun.com/thread-8329-1-1.html 问题导读: 1.hadoop编程需要哪些基础?2.hadoop编程需要 ...