ES6 学习 -- Promise对象

Posted secretangel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 学习 -- Promise对象相关的知识,希望对你有一定的参考价值。

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的回调函数








































以上是关于ES6 学习 -- Promise对象的主要内容,如果未能解决你的问题,请参考以下文章

ES6新特性:Javascript中内置的延迟对象Promise

es6 promise.all()

ES6 promise

ES6 promise时序,本质,常见错误

ES6 promise的用法总结

ES6学习—Promise对象 超鸡重要