Promise详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、什么是Promise?

promise本身是同步的thencatch是异步的

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(操作成功{

resolvevalue

}else{

rejecterror

)

// .then第一个回调执行成功回调第二个是失败回调

Promise.then( function (value) {

//成功 }functionvalue{

//失败 } 
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6