Promise常用的方法
一、什么是Promise?
Promise是异步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,是为了解决异步处理回调地狱而产生的
Promise构造函数是同步执行的,then 方法是异步执行的,所以Promise创建后里面的函数会立即执行,构造函数中的resolve和reject只有第一次执行有效,,也就是说Promise状态一旦改变就不能再变
async函数返回一个Promise对象,可以使用then方法添加回调函数,函数内部使用await来表示异步,async函数只有从await向下才是异步的开始
它有三个状态:pedding:初始状态,既不代表成功也不代表失败
fulfilled:成功状态
rejected:失败的状态
两个过程:pedding---->fulfilled、pedding---->rejected
缺点:
①无法取消Promise,一旦新建它就会立即执行,无法中途取消。
②如果不设置回调函数,promise内部抛出的错误,不会反应到外部。
③当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
二、Promies的静态方法
1.Promise.resolve()函数被执行时, 会将promise的状态从 pending 改成 fulfilled 成功
2.Promise.reject()函数被执行时, 会将promise的状态从pending 改成 rejected 失败
new Promise((resolve, reject) => {
reject() //Promise.reject()----> rejected 失败
// resolve() Promise.resolve()----->fulfilled 成功
})
3.Promise.all([promise1, promise2, promise3]) 等待原则, 是在所有promise都完成后执行, 可以用于处理一些并发的任务,如果Promise实例都进入Fulfilled状态,Promise.all返回的实例才会变成Fulfilled状态并将Promise实实例数组的所有返回值组成一个数组,传给Promise.all返回实例的回调函数;如果有某一个或者多个实例进入rejected状态,Promise.all返回的实例会立即变成Rejected状态并将第一个rejected的实例返回值传递给Promise.all返回实例的回调函数。
应用场景4.Promise.race([promise1, promise2, promise3]) 赛跑, 竞速原则, 只要三个promise中有一个满足条件, 就会执行.then(用的较少),先执行到成功就返回成功的状态,返回失败就是失败状态
三、Promise的实例方法
1.Promise.then(),此方法接收两个参数onResolve和onReject,分别代表当前Promise对象的成功和失败
2.Promise.catch(),当pedding变为rejected时会进入catch,来对错误进行处理
四、reject和catch处理上有什么不同?
①reject是用来抛出异常,catch用来处理异常
②reject是Promise的方法,而catch是Promise实例的方法
③reject后面的东西一定会进入.then中的第二个回调,如果then中没有写第二个回调,则进入catch
④网络异常,会直接进入catch而不会进入then的第二个回调
五、手写一个Promise
//Promise构造函数的两个方法resolve,reject,分别代表成功和失败
var Promise=new Promise((resolve,reject)=>{
if(操作成功){
resolve(value)
}else{
reject(error)
)
// .then第一个回调执行成功回调,第二个是失败回调
Promise.then( function (value) {
//成功 },function(value){
//失败 } )