2022-09-18笔试题00
请注意,本文编写于 588 天前,最后修改于 588 天前,其中某些信息可能已经过时。

面试高频手撕代码题

Promise 系列

实现 Promise.all()

Promise.all = function (iterator) {
  if (!Array.isArray(iterator)) return;
  let count = 0;
  let res = [];
  return new Promise((resolve, reject) => {
    for (let item of iterator) {
      Promise.resolve(item)
        .then(data => {
          res[count++] = data;
          if (count === iterator.length) {
            resolve(res);
          }
        })
        .catch(e => {
          reject(e);
        });
    }
  });
};

// test
const p1 = Promise.resolve(3);
const p2 = 4;
const p3 = new Promise(resolve => {
  setTimeout(resolve, 100, 'lee');
  // setTimeout的第三个往后参数都是用来作为第一个参数也就是函数的参数,也就是其实是setTimeout(resolve('lee'), 100)
  // 详情参考:https://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout
});
Promise.all([p1, p2, p3]).then(data => {
  console.log(data);
});

本文作者:前端小毛

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!