详解promise

先上代码

let remember = true;
        let getMoney = new Promise((resolve,reject)=>{
            if(remember){
                let money = 999
                resolve(money)
            }else{
                let noMoney = new Error('今年你已经毕业了,没有红包了');
                reject(noMoney)
            }
        })

        let test = function(){
            getMoney.then((fulfilled)=>{
                console.log(fulfilled);
            }).catch((rejected)=>{
                console.log(rejected.message);
            })
        }

        test()

这里要实现的是 过年了 到了找家长要红包的时候了 看看家长还记得不记得给你红包

这里要用到promise

大家都知道promise是一种比较好的实现异步操作的方法

一 . 第一点 说一下promise里面的状态 pending待解决 fulfilled已解决 rejected拒绝

在新建一个promise的时候呢 状态为pending 如果已成功 状态更改为fulfilled 失败rejected

并且此状态为一次性改变 且不可逆

可以理解为 家长给你红包 承诺(promise)过年给红包了 然后你在那等过年 你也不知道家长给不给 此时状态为pending

代码中定义的remember  为 true时  代表  家长记得给你红包了  那么状态就会更改为fulfilled

如果为flase  家长不是不记得 而是他说今年该毕业了 不能在给你红包了  就是找借口不给了 说话不算数了   此promise不实现了  状态更改为rejected

二. 第二点  resolve 和 reject

这是promise的参数 同时呢 也可以把他们看做是一个函数 一个方法  看作一个执行器 

当成功时候执行resolve

失败时候执行reject

并且这两种方法在创建promise中是立刻同步调用的 不会排在队列中

三. then()和catch()

看网上很多资料  有很多解释的  我大概以我的理解 用最简单的话描述一下

Promise.prototype.then() 我们可以看到then和catch 方法是存在Promise实例原型中的

所以才可以用.来调用

then(成功,失败)  then里面有两个参数 一是成功捕获 二是失败捕获 二者均为方法

如果实在难理解  可以理解为 .catch就是.then的第二个参数  

// bad
promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  });

// good
promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

上代码  大家可以对比一下

Promise.prototype.catch = function(fn){
    return this.then(null,fn);
}

 那么为什么这样用  区别就是  如果在then的第一个函数里抛出了异常,后面的catch能捕获到,而then的第二个函数捕获不到

所以一般上来讲 都是用.catch

这样的话我觉得最上面的代码应该是可以看懂并使用的了

如果有想更进一步了解其底层原理  请看手写原理层promise

https://blog.csdn.net/qq_45158336/article/details/122783169

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值