Promise详解

16 篇文章 0 订阅
11 篇文章 0 订阅

一、什么是Promise?

promise本身是同步的,then,catch是异步的

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){

//失败 } )
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值