# js之手写promise

# 1. Promise.all

Promise.all = function (promises) {
  return new Promise(function (resolve, reject) {
    let result = [];
    let count = 0;
    for (let i = 0; i < promises.length; i++) {
      promises[i].then(function (data) {
        result[i] = data;
        if (++count == promises.length) {
          resolve(result);
        }
      }, function (err) {
        reject(err);
      });
    }
  });
}
面试题

给定一组url,利用js的异步实现并发请求,并按顺序输出结果

function printOrder(urlArr) {
  let length = urlArr.length
  let count = 0
  let result = []
  for(let i = 0; i < length; i ++) {
    let url = urlArr[i]
    ajax(url).then((res) => {
      result[i] = res
      count++
      if (count >= length) {
        log()
      }
    }).catch(err => {
      result[i] = res
      count++
      if (count >= length) {
        log()
      }
    })
  }
  function log() {
    console.log(result)
  }
}

function ajax(url) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({ data: url })
    }, 1000)
  })
}
printOrder(['www.baidu.com','www.alibaba.com','www.hhh.com'])