promise实现串行和并行执行

in JavaScript with 0 comment

promise实现串行

promise实现串行实现一:主要利用promise.then中返回一个new Promise()实现

//then链式调用可以实现串行执行
      //promise.then嵌套这种情况(每个then返回一个新的自定义promise),如果任何一个then里的promise执行了reject则就会被catch捕捉
      //promise.then默认也是返回一个promise,但这个promise状态是fulfilled,确定的
       let p = new Promise((resolve, reject) => {
            resolve('hi')
            //reject('error1')
        })
        let p1 = p.then((res) => {
          //请求api1, 得到结果1
           return new Promise((resolve, reject) => {
             //resolve(res+' again')
             reject('第二步出错')
           })
        }).then((res) => {
          //请求api2, 得到结果2
          return new Promise((resolve, reject) => {
             resolve(res+' again 2')
           })
        }).then((res) => {
          console.log(res)
        }).catch(e => {
          console.log(e)
        })

promise实现串行实现二:使用async, await实现

function sleep(n, res) {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
           resolve()
           console.log(res)
        }, n)
      })
    }
    async function task(){
      console.log('开始依次请求接口:')
      await sleep(3000,'接口1返回数据')
      await sleep(2000,'接口2返回数据')
      await sleep(2000, '接口3返回数据')
    }
    task()

promise实现并行任务

使用 Promise.all()实现并行执行

//Promise.all()实现并行执行
    var promises = function() {
      //map做的事情是映射,原数组被映射为另一个数组
      return [3000, 2000, 1000].map(current => {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            console.log(current)
            reject(current)
          }, current)
        })
      })
    }
    //promises数组里的promise并行执行,最后的then为所有promise resolve的返回值数组集合
    //并且res中的结果是跟调用promise的顺序是一致的,尽管可能promise执行完成的顺序不一致
    Promise.all(promises()).then((res) => {
       console.log('all done, return ' + res)
    })
评论已关闭.