ES6对Promise的初步理解

Promise是异步编程的一种解决方案,Promise是一个对象,可以获取一步操作的消息,他的出现大大改善了异步编程的困难,避免了回调地狱,它比传统的回调函数更合理,更强大。

所谓Promise,简单来说就是一个容器,里面曹存折某个未来才会结束的事件,通常是一个异步操作的结果。从语法上说,Promise就是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方式进行处理。

(1)Promise的实例有三个状态:

① Pending (进行中)

② Resolved(已完成)

③ Rejected(已拒绝)

当把一件事交给Promise时,它的状态就是Pending,任务完成了状态就变成了Resolved,没有完成失败了就变成了Rejected。

(2)Promise的实例有两个过程:

① pending  => fulfilled : resolved (已完成)

② pending  => rejected : rejected (已拒绝)

注意 :一旦从进行状态变成了其他状态就永远不能更改状态了

Promise的特点:

① 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态,pending (进行中),fulfilled(已成功),rejected(已失败)。只有异步操作的结果,才能决定当前是哪一种状态,只有两种可能:从pending 变为fulfilled ,从pending变成rejected 。如果改变已经发生了,再对promise对象添加回调函数,也会立即得到这个结果,这和js事件完全不同,事件的特点是:如果你错过了,再去监听是得不到结果的。

Promise的缺点:

① 无法取消Promise,一旦新建它就会立即执行,无法中途取消。

② 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部

③ 当处于pending状态时,无法得知当前进展到哪个阶段。

如何创建Promise对象:

const pro = new Promise(function(resolve,reject){
       if(true){
       resolve(value);
 } else{
       reject(error);
 }
});

一般情况下都会使用 new Promise()来创建Promise对象。但是也可以使用promise.resolve 和 promise.reject 这两个方法

Promise的方法:

1.then()

当promise执行的内容符合成功条件是,调用resolve函数,失败就调用reject函数

promise.then(function(value) {
  // 成功
}, function(error) {
  // 失败
});

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象状态变成rejected时调用。其中第二个参数可以省略。then方法返回的是一个新的Promise实例。因此可以链式写法。

2.catch()

catch方法相当于then方法的第二个参数,指向reject的回调函数。不过catch方法还有一个作用,就是哎执行resolve回调函数时如果出现错误,抛出异常,不会停止运行,而是进入catch方法中

3.all()

all方法可以完成并行任务,他接收一个数组,数组的每一项都是promise对象。当数组中所有的promise对象的状态都是resolved的时候 all方法的状态就变成resolved,有一个rejeced,那么all方法的状态就是rejected。


let promise1 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(1);
	},2000)
});
let promise2 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(2);
	},1000)
});
let promise3 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(3);
	},3000)
});
Promise.all([promise1,promise2,promise3]).then(res=>{
    console.log(res);
    //结果为:[1,2,3] 
})

4.race()

race方法和all一样,接收的参数是每一项都是promise对象的数组,当最先执行完的时间执行完之后就直接返回该promise对象的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值