封装Promise

52 阅读1分钟

封装Promise

  • 再promise.then 内部 return 了一个 新的 promise对象
  • 可以在后续再写一个 .then

  // 封装 
   function fn(){
   //使用过 Promise 封装异步函数
        const p = new Promise (function(fulfilled, rejected){
            /**
             *  fulfilled 会把我们这个 promise 状态转换为 成功
             *  rejected  会把我们这个 promise 状态转换为 失败
             *  两个都是函数
            */
            //异步程序
             //设置随机数 (生成  0~1 向下取整 * 3000 0 ~ 2700 ) + 1500 
            const timer = Math.floor(Math.random()*3000)+ 1500
             // 设置延时器 
            setTimeout(()=>{
             if(timer> 3000){

                 // 判断 随机生成的延时器时间 timer> 3000 毫秒时 表示链接失败 调用函数 rejected 打印
                rejected('网络申请失败, 请重新申请')

             }else{
                    // 判断 随机生成的延时器时间 timer> 3000 毫秒时 表示链接成功 调用函数 fulfilled 打印
                fulfilled('网络申请成功, 欢迎访问')
                
             }
            },timer)
        })
        return p
     }
         //使用 Promise 实例化对象对像里的方法

       p.then(res)=>{
       /**
        * 在 Promise 触发 成功状态时会触发
        * 且接受 fulfilled 时传递的参数 res这里 其实就是字符串('网络申请成功, 欢迎访问')
        */
            console.log(res)
             return fn()

       }).then(res)=>{
             console.log(res)
             return fn()
       }.then(res)=>{
             console.log('第二次声请网络成功')
             return fn()
       } .catch(res)=>{
        /**
         * 在 Promise 触发 失败状态时会触发
         * 且接受 rejected  时传递的参数 res这里 其实就是字符串('网络申请失败, 请重新申请')
         * 
        */
            console.log(res)
       })