ES6--Promise

278 阅读1分钟
  1. ES6语法
  2. Promise是异步编程的一种解决方案
  3. new Promise((resolve, reject) => {......})
  • 什么情况下用Promise

    一般情况下是有异步操作时,使用Promise对异步操作进行封装

    //Promise参数是一个函数,这里是(resolve, reject) => {}
    //这个参数中的函数又有两个参数resolve,reject,也都是函数
    //链式编程
    new Promise((resolve, reject) => {
      //异步操作
      setTimeout((data) => {
        //在这里判断成功还是失败
      	//成功就调用resolve,就会进入后面的.then(),不在此处处理业务
      	if(){
          resolve(data);
        } else {
           //失败就调用reject
        	reject('error..')
        }  
      }, 1000)
      }).then((data) => {
      	//真正处理业务的地方
      	console.log("hello world");
    }).catch(err => {
      console.log(err);
    })
    
  • Promise的三种状态

    • pending:等待状态,比如正在进行网络请求或者定时器没有到时间
    • fulfill:满足状态,当我们主动回调resolve时就处于该状态,并且会回调.then()
    • reject:拒绝状态,当我们主动回调reject时就处于该状态,并且会回调.catch()
  • Promise的链式调用

    • 在.then()中不进行异步操作,但是需要对上一步的data进行处理,为了逻辑分层,可进行链式分层

      两种方式

      1. 使用Promise.resovle(newdata):return Promise.resolve(data + '2222')
      2. 直接return newdata:return data+'111'
      //上一层
      .then((data) => {
              console.log(data);
              //下一层的res从这里来
              return Promise.resolve(data + '2222')
              //return data+'2222'
          }).then(res => {
              console.log(res);
          })
      
    • 在.then中不进行异步操作,但是需要对上一步的err进行处理,为了逻辑分层,可进行链式分层

    • 两种方式

      1. 使用Promise.reject(err):return Promise.reject(err + '2222')
      2. 直接throw err:`throw data+'111'
      .then(res => {
              console.log(res);
              return Promise.reject(res + '+err1')
              //throw res + '111'
          }).catch(err => {
              console.log(err);
          })
      
  • Promise.all()

    Promise.all([
      Promise1, 
      Promise2
    ]).then(res => {
      //Promise1的结果
      res[0]...
      //Promise2的结果  
      res[1]...  
    })