1.promise含义:可以将promise对象看成是一个容器,它保存着未来才会结束的某个事件(一般是异步操作事件)的结果,各
种异步操作都可以用promise对象来处理
promise的特点:
(1)promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有异步操作的结果,可

以决定当前是哪一种状态,其他操作无法改变当前状态
(2)一旦状态值改变,就不会再变了,任何时候都可以得到这个结果。promise对象的状态改变,只有从pending变为

fulfilled和从pending变为rejected两种,状态发生改变之后,就不会再变动

2.promise对象的优缺点:
优点--- 有了promise对象,就可以将异步操作以同步操作的流程表达出来,避免了多层嵌套的回调函数,另外promise对象提

供统一的接口,使得控制异步操作更加容易
缺点:无法取消promise,一旦新建就立即执行,无法取消;如果不设置回调函数,promise内部报错不会反应到外部;当处于

pending状态时,无法得知目前进展到哪个阶段(是刚刚开始还是即将完成)

***解决Promise创建自动执行的办法:将Promise对象在一个函数中定义,当我们调用函数时,才去执行Promise对象

3.promise对象实例用法
function getData() {

// 这里请求后端数据

let p = new Promise(function(resolve, reject) {
  if(/* 异步操作成功 */) {
    resolve(value); // 请求得到的数据或响应结果
  }else {
    reject(error); // 请求失败原因
  }
})
return p;
};

// 通过Promise构造函数创建实例,该构造函数接收一个匿名函数作为参数,匿名函数的两个参数resolve和reject都 
是两个函数。resolve函数的作用是,将Promise对象的状态从“未完成”变成“成功”,在异步操作成功时调用,并作为参数 
传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”,在异步操作失败时调用,并将异步操作报 
的错作为参数传递出去

getData().
then(function(result) { 
  console.log(result);
})
.catch(function(error) {   // catch()可以在then()出错的时候直接往下执行,不会直接报错然后终止
  console.log(error);
})

Promise.prototype.finally() // 不管Promise对象最后状态如何,该方法都会执行
如下:
promise
.then( result => {...}) // 状态值为resolved时执行
.catch( error => {...}) // 状态值为rejected时执行
.finally( ()=> {...}); // 不管如何都会执行

Promise.all() // 将多个Promise实例,包装成一个新的Promise实例,如下:
const p = Promise.all([p1, p2, p3]);
(1)只有p1、p2、p3的状态都变成fulfilled时,p的状态才变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的

回调函数
(2)只要p1、p2、p3中的一个状态为rejected,那么p的状态就变成rejected,此时第一个状态为rejected的实例的返回值,会

传递给p的回调函数

最新文章

  1. SQLMap Tamper Scripts Update 04/July/2016
  2. 精通 CSS 选择器(二)
  3. .NET 配置文件简单使用
  4. sphinx使用小记之使用小结
  5. RAID-4与模2和
  6. Hibernate4.x之映射关系--双向1-n
  7. Hadoop MapReduce概念学习系列之mr程序详谈(二十三)
  8. class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法
  9. (转)使用OpenVPN的一些注意事项
  10. HDU 1030 Delta-wave 数学题解
  11. 通过分析 JDK 源代码研究 TreeMap 红黑树算法实
  12. ACID 数据库正确执行四要素
  13. Docker安装入门 -- 应用镜像
  14. react基础篇 整理(一)
  15. 单线拨号上网时RouterOS内网端口映射的配置
  16. sum(case when ct.tradeTotal >= 0 then 1 else 0 end)的意思
  17. 课程回顾-Structuring Machine Learning Projects
  18. 使用js冒泡实现点击空白处关闭弹窗
  19. ngnix使用超时响应时间配置避坑一例
  20. JPA Annotation注解

热门文章

  1. PHP面试 PHP基础知识 一(引用变量)
  2. python3 递归函数return返回None
  3. 常用命令--sed
  4. ajax中的onload和readychange区别
  5. .Net平台调用の初识
  6. 完美编译街机模拟器MAME(Android版)基于MAME4all
  7. Yacc - 一个生成 LALR(1) 文法分析器的程序
  8. GIT 部分记录
  9. python_django_urls基础配置
  10. 去sqlserver日志