promise 的原理

promise是es6的一个对象

它用来描述一个异步操作的结果值拥有三个状态
  1. 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
  2. 已兑现(fulfilled): 意味着操作成功完成。
  3. 已拒绝(rejected): 意味着操作失败。
它通过.then()方法来处理结果,处理结果后,仍然返回一个promise对象
 const pa = new Promise((re, je) => {
        // re("成功");
        je("gg");
      })
        .then((value) => {
          console.log("我是value", value); // gg
        })
        .then(
          (res) => {
            console.log("我是res", res); // undefined
          },
          (rej) => {
            console.log("我是rej", rej); // 不会走
          }
        );

ps:

  1. fulfilled/reject;当一个promise对象被 resolve/reject 后。

  2. pending ;当一个promise对象还未被 resolve/reject 时。

  3. promise.resolve 之后返回的内容由什么决定? 返回给定value决定的Promise对象。换句话说,promise的细分内容时由这个value决定的。那value都有什么类型的值呢?
    3.1 thenable(即,带有then方法的对象),返回的值由then方法决定
    3.2 否则的话(该返回值为 空,基本类型,不带then方法的对象),返回一个接受状态的promise对象。并且将该value传递给对应的then方法。

  4. promise then的返回值
    then是默认返回Promise对象的,但是也可以手动return内容。return不同的内容由不同的效果。
    简单来说,添加解决(fulfillment)和拒绝(rejection)回调到当前 promise, 返回一个新的 promise, 将以回调的返回值来resolve.
    (这两句话是关键,但是其实翻译的挺不是人的。意思是then的返回值是一个promise对象,但是promise如果每调用resolve方法的,后续的then回调方法是不会被触发的。所以目前这个then的返回值,就是会被用来当做返回的那个promise的resolve的入参。
    4.1 return 一个【值】,那么会返回一个接受状态的Promise对象,这个【值】会成为对应then方法的回调参数值。
    4.2 不 return 任何内容,那么会返回一个接受状态的Promise对象,对应then方法的回调参数值为undefined。
    4.3 抛出一个错误,那么会返回一个拒绝状态的Promise对象,对应的拒绝状态的回调函数的参数值为被抛出的错误。
    4.4 return 一个 接受状态的Promise,那么会返回一个接受状态的promise对象,并且这个Promise的接受状态的回调函数(resolve)的参数将作为被返回的那个Promise对象的resolve回调函数的参数。
    4.5 同上文,如果return一个拒绝状态的Promise,那么将接受状态的操作换成拒绝状态即可。
    4.6 return 一个 未定状态(pending)的Promise,那么返回的Promise状态也是未定的,并且后者的终态与前者相同;并且,它变为终态时的回调函数与参数,和前者的相同。

    resolve 与 then的返回值的区别
    1.前者返回的内容与 resolve的【参数值】有关,不带then的值都是接受状态,带then的一律看then的返回内容;而后者则是只根据then的返回内容来决定其返回的Promise对象的状态和参数。
    2.对比来看,前者是依赖后者的规则。后者返回的Promise的状态是最全的,有三种,而前者只有一种,是接受状态。但是

有些浏览器会把状态写作 ,但表达的意思都是一样的。因此,有些关于 为什么要同时存在他们二者的争论 ,其实毫无意义。因为 resolved(已决议)包含 settled 和 锁定(依赖的另一个 promise 的状态被"锁定"了)。而settled(已敲定) 包含 <resolve,reject>。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值