关于JS的Promise()方法

1、使用语法

new Promise((resolve,reject)=>{
    ...
})
//构造函数,传入两个方法作为形参

2、状态和结果

        一个Promise实例有两个属性,状态和结果。状态有三种:Pending,fulfilled和rejected,分别代表挂起,成功和失败。

        在构造函数时(也就是上面),改变状态和结果可以通过调用以下方法:

resolve(e);
//改变当前Promise的 状态 为fulfilled(已成功)并将参数传入当前Promise作为 结果
reject(e);
//改变当前Promise的 状态 为rejected(已失败)并将参数传入当前Promise作为 结果

*Promise的状态仅能转变一次。

        结合1,一个起步的promise实例应该是这样的:

const P = new Promise((resolve,reject)=>{
  var n = 1
  var m = 1
  if(m + n == 2){
    resolve("一加一等于二");
  }else{
    reject("一加一不等于二!");
  }
})

3、then方法

then((value1)=>{},(value2)=>{});

        Promise原型中的方法,可以直接调用。但在Promise状态未被改变时,then方法不会被执行。这也就是Promise的核心思想,在前面的代码还未被执行或是正在等待结果时,后面的嵌套会一直被挂起。可以理解成将异步执行的回调地狱优化成同步执行。

        两个形参分别是:

        1、Promise的状态为fulfilled时调用的方法函数,参数value1为Promise的结果;

        2、Promise的状态为rejected时调用的方法函数,参数value2亦为当前Promise的结果。

        换句话说,then方法就是在Promise执行不出错的情况下,以其当前状态为来选择执行不同的后续方法。

        then方法在调用后,返回值是一个全新的Promise,状态为Pending(挂起),也就是说,then方法可以使用链式操作来执行嵌套:

const p = Promise()
p.then().then().then()

        在then方法被调用时,可以在两个分支中分别return来设置then返回值,也就是下一个嵌套中Promise的状态(第一个对应fulfilled,后一个对应rejected):通过这种方法可以更好的执行嵌套。当然,函数默认return undefine,什么都不写也是可以设置成fulfilled的。

        tips:当代码出错时会返回rejected

4、catch方法

catch((reason)=>{})

        Promise原型中的方法,可以直接调用。当Promise状态为rejected或代码出错时(人为抛出错误也算)就会被执行。

5、总结

简单来说就是:

        promise是一个实例,他有两个属性:状态和值。

然后分成两部分:

        第一部分是构造promise,设定在什么情况下,利用resolve(e)reject(e)这两个方法将promise的状态改成fulfilled/rejected,也就是成功/失败,并将e传入promise的值

        第二部分是调用promise下的then方法,then只有在检测到了promise状态被改变的情况下才会执行。then里可以设置两种状态分别执行什么操作,比如获取当前的值(第一步中传入的)

        最后then也会继续返回一个promise实例(then也就是一个promise),故在then中也可以继续调用两种改变状态的方法,并如同p.then().then()的形式进行嵌套调用。

大部分教程转载自最好理解的Promise教程_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值