Promise resolve封装

resolve函数封装

1.resolve是Promise函数上的方法,不是Promise实例对象的方法

2.resolve返回的结果为一个Promise对象

3.判断Promise对象下的状态:是Promise,状态由该Promise决定,是Promise,就调用then方法,成功走第一个回调,失败走第二个回调;undefined或者值,状态为成功,调用resolve就可以

//添加resolve方法
Promise.resolve = function (value) {
//  返回结果为Promise对象
  return new Promise((resolve, reject) => {
    //  判断Promise对象下是否为Promise
    if (value instanceof Promise) {
      console.log(value)
      value.then(v => {
        console.log(v)
        resolve(v);
      }, r => {
        console.log(r)
        reject(r);
      })
    } else {
      //  状态设置为成功
      resolve(value);
    }
  })
}

reject函数封装

Promise.reject返回的所有的都是失败的onRjected

//添加reject方法
Promise.reject = function (reason){
  return new Promise((resolve,reject)=>{
    reject(reason);
  })
}

all方法封装

1.返回结果为Promise对象

2.参数是Promise组成的数组 

3.结果由参数的成功决定,参数的状态都为成功才成功。成功结果是参数的Promise成功的组合

参数有一个失败就是失败的了,失败结果是失败的那个Promise   

//添加all方法
Promise.all = function (promises) {
  let count = 0;
  //存放成功的数组
  let arr = [];//这种方式的弊端是顺序会不正确
//  返回结果为一个Promise 对象
  return new Promise((resolve, reject) => {
    //  遍历参数的数组
    for (let i = 0; i < promises.length; i++) {
      promises[i].then(v => {
        //  可以得知对象状态是成的 每个参数的Promise都为成功就是成功  加计数变量
        count++;
        //当前promise对象成功的结果 存入到数组中
        // arr.push(v)
        arr[i] = v;
        if (count === promises.length) {
          resolve(arr[i])
        }
      }, r => {
        reject(r);
      })
    }
  })
}

race方法

1.返回结果为Promise对象

2.参数是Promise组成的数组

3.状态由最先改变状态的peomise决定

//添加race方法
Promise.race=function (promises) {
  return new Promise((resolve,reject)=>{
    for(let i=0;i<promises.length;i++){
      promises[i].then(v=>{
        resolve(v)
      },r=>{
        reject(r)
      })
    }
  })
}

then方法中是异步执行的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值