promise

1.概念

简单来讲,promise是一个容器,里面存在着某个未来会发生的事件,从语法来讲,promise是一个对象,从它可以获取异步操作的信息

2.特点:

promise对象的状态不受外界的影响,状态有三种,pending,fullfilled,rejected,只有异步操作才能改变promise对象的状态
promise对象的状态一旦改变,就不会再变,任何时候都能得到这个结果。从pending变为fullfilled或者从pending变为rejected,都成为resolved。

3.缺点:

无法取消
不设置回调函数,promise内部抛出的错误不会反馈到外部
当处于pending状态的时候,无法得知处于哪个阶段。

4.promsise原型方法

promise.prototype.then
promise.prototype.catch

5.promise的方法

promise.all([p1,p2,p3]), promise.all方法接受一个数组作为参数,
特点:promise的状态是由p1,p2,p3共同来决定的,只有p1,p2,p3的状态都为fullfilled时,或者 p1,p2,p3中有一个状态为rejected时,此时第一个被rejected的实例的返回值会传递给promise的回调函数,才会调用回调函数
promise.race([p1,p2,p3])
特点:只要p1,p2,p3中一个状态发生变化,promise对象的状态就会发生改变
promise.reject() 返回一个新的promise实例,状态为rejected

6.将对象转换为promise对象

promise.resolve()

7.两个附加方法

done() done方法处于回调链的尾端,保证抛出任何可能出现的错误; done方法可以提供fullfilled和rejected状态作为回调函数,也可以不提供任何参数
finally() finally方法用于指定不管promise对象最后的状态是什么都会执行的操作。
它与done的最大区别是,它的参数是一个普通的回调函数,该函数不管怎么样都要执行。

8.当不想区分函数f是同步还是异步,都想用then方法指定下一步流程,用catch方法来抛出错误

方法:
利用async()函数 eg: (async() =>f())()
使用new Promise() eg: (()=>{new Promise(resolve => resolve(f()))})()
使用promise.try() eg: promise.try(f) promise.try 模拟了try代码块

你可能感兴趣的:(promise)