Promise

Posted by Learning libs on August 16, 2021

Promise


  var p1 = new Promise((res, rej) => {
    setTimeout(() => {
      res(1111)
    }, 1000)
  })

  var p2 = new Promise((res, rej) => {
    setTimeout(() => {
      rej(2222)
    }, 2000)
  })

Promise.promideAll


  Promise.all([p1, p2]).then(res => {
    console.log(res);
  }, err=>{
    console.log(err, 'err--->');
  })

  // 手写简易promiseAll
  myPromiseAll([p1, p2]).then(res => {
    console.log(res, 'myPromiseAll');
  }, err=>{
    console.log(err, 'err===>');
  })

  function myPromiseAll(arr) {
    return new Promise(resolve => {
      let n = arr.length
      let resArr = []
      let num = 0

      arr.forEach(item => {
        item.then((res, rej) => {
          resArr.push(res)
          num++
          if (num === n) {
            resolve(resArr)
          }
        }, err=>{
          console.log(err);
        })
      });
    })
  }
  

Promise.allSettled

  Promise.allSettled([p1, p2]).then(res=>{
    console.log(res, 'promiseAllSettled');
  })


  // 手写简易promiseAllSettled
  myPromiseSettled([p1,p2]).then(res=>{
    console.log(res, 'myPromiseSettled');
  })

  function myPromiseSettled(arr) {
    return new Promise(resolve => {
      let n = arr.length
      let num = 0
      let resArr = []
      arr.forEach((item, key) => {
        item.then(res => {
          num++
          resArr[key] = {
            status: 'fulfilled',
            value: res
          }
          if (num === n) {
            resolve(resArr)
          }
        }, err => {
          num++
          resArr[key] = {
            status: 'rejectd',
            reason: err
          }
          if (num === n) {
            resolve(resArr)
          }
        })
      })
    })
  }