• es6 Promise, all, race 理解及应用


    ES6中对promise的理解及它的实例方法?

    1) promise是一种异步编程的解决方案(本身并不是异步操作)

    2) 多个串联的异步操作形成回调地狱--promise解决了回调地狱

    3) 三种状态: pending(进行中), fulfilled(已成功), rejected(已失败)

    4) 特点:状态不受外界影响,只有异步操作的结果,决定当前是哪一种状态,

       一旦状态改变就不会再变(pending-->fulfilled, pending-->rejected)

    5) 用法:promise是一个构造函数,用来生成Promise实例

    6) Promise构造函数接收一个函数作为参数,这个函数有两个参数

      const p = new Promise(function(resolve,reject){

        resolve()//对象状态:从未完成变为成功,在异步操作成功的时候调用

        reject()//对象状态:从未完成变为失败,在异步操作失败的时候调用

      })

    Promise实例中的三个方法 then, catch(),finally();

      1) then(): //当实例状态发生改变的时候的回调函数

        const p = new Promise(function(resolve,reject){

          setTimeout(()=>{

            const time = new Date().getTime();

            if(time % 2 == 0){//偶数

              resolve('成功的数据,time--'+time)

            }else{

              reject('失败的数据')

            }

          })

        })

        p.then((value)=>{//resolve 成功的状态

          console.log(value)

        },(reson)=>{ //失败的状态(catch也可以)

          console.log(reson)

        })

      2) catch() 用于指定发生错误的回调函数

        p.catch((value)=>{ //(then的第二个参数也可以)

          console.log(value)

        })

      3) finally() 无论Promise成功或失败都需要执行的操作。

        p.then((value)=>{

          console.log(value)

        }).catch((value)=>{

          console.log(value)

        })

        .finally(()=>{

          console.log('最后的结果')

        })

    ## Promise.all理解及应用场景

    1)

     //用于将多个Promise实例,包装成一个新的Promise实例

    //状态:all状态有p1,p2决定,三个状态成功,all返回成功,其中一个返回失败,all返回失败。

    let p1 = new Promise((resolve,reject)=>{

      resolve('成功1')

    })

    let p2 = new Promise((resolve,reject)=>{

      //resolve('成功2')

      reject('sb')

    })

    //如果定义了自己的catch方法,all是不能触发的

       console.log('error')

    }) -->

    //参数可以不是数组,但必须是iterator接口.

    let all = Promise.all([p1,p2]);

    console.log(all) //

    all.then((value)=>{

      console.log(1)

    }).catch((res)=>{

      console.log(2)

    })

    2) 多个请求结果合并在一起

    function fun1(){

      return new Promise((resolve,reject)=>{

        setTimeout(()=>{

          resolve('函数1')

        },1000)

      })

    }

    function fun2(){

      return new Promise((resolve,reject)=>{

        setTimeout(()=>{

          resolve('函数2')

        },2000)

      })

    }

    function fun3(){

      return new Promise((resolve,reject)=>{

        setTimeout(()=>{

          resolve('函数3')

        },3000)

      })

    }

    function initFun(){

      let allFun = Promise([fun1(),fun2(),fun3()])

      console.log(allFun)

      allFun.then((v)=>{

        console.log(v)

      })

    }

    initFun();

    ## Promise.race的用法以及使用场景

    1 将多个Promise实例包装成一个新的Promise实例

    race 和 all 大致用法相同。

    race 和 all 区别?

    all 返回都成功才成功,有一个不成功就返回失败。

    race 只要实例中有一个改变状态,就会返回(无论是成功或失败)

    function f1(){

      return new Promise((resolve,reject)=>{

        setTimeout(()=>{

          resolve('函数111')

        },1000)

      })

    }

    function f2(){

      return new Promise((resolve,reject)=>{

        setTimeout(()=>{

          reject('函数222')

        },2000)

      })

    }

    //调用

    const pTrace = Promise.race([f1,f2]);

    console.log(pTrace)

  • 相关阅读:
    Python自学笔记9:实操案例六(千年虫,购物流程)
    Linux 文件与目录管理
    终于有人把Java面试高分Guide总结得如此系统,堪称傻瓜式笔记总结
    基于单片机16位智能抢答器设计
    easyexecl导出100万行execl报字体错误的解决办法
    C++函数传递数组方法及原理刨析
    SpringBoot整合JWT+Vue
    ++运算符重载,--运算符重载
    得到 K 个黑块的最少涂色次数
    QT(39)-vs开发qt程序提示无法打开源文件
  • 原文地址:https://blog.csdn.net/m0_65730686/article/details/126123161