js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

4. 实现Primise.race

Open Sunny-117 opened this issue 3 years ago • 4 comments

/**
   * 返回的Promise与第一个有结果的一致
   * @param {iterator} proms
   */
  Promise.race=function(proms) {
    return new MyPromise((resolve, reject) => {
      for (const p of proms) {
        MyPromise.resolve(p).then(resolve, reject);
      }
    });
  }

Sunny-117 avatar Nov 03 '22 06:11 Sunny-117

Promise.myRace = function(arr){
  return new Promise((resolve,reject) => {
    for(let item of arr){
      Promise.resolve(item).then(res => {
        resolve(res)
      }).catch(err => {
        reject(err)
      })
    }
  })
}
let p1 = new Promise(resolve => {
  setTimeout(() => {
    resolve(1)
  },100)
})
let p2 = new Promise((resolve,reject) => {
  setTimeout(() => {
    reject(2)
  })
})
let p3 = new Promise((resolve,reject) => {
  setTimeout(() => {
    resolve(3)
  })
})

Promise.myRace([p1,p2,p3]).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
})

lxy-Jason avatar Nov 16 '22 07:11 lxy-Jason

Promise.race = function(promises) {
  // 检查是否是迭代对象
  if(typeof promises[Symbol.iterator] !== 'function') {
      throw(`传入的参数不是一个可迭代对象`)
  }
  return new Promise(function(resolve, reject) {
    for (var i = 0; i < promises.length; i++) {
      Promise.resolve(promises[i]).then(resolve, reject);
    }
  });
}

kangkang123269 avatar Feb 20 '23 06:02 kangkang123269

Promise.race = function (promises) {
  if (promises == null || typeof promises[Symbol.iterator] !== "function") {
    throw new Error(`传入的参数不是可迭代对象`);
  }
  promises = [...promises];
  return new Promise((resolve, reject) => {
    for (let p of promises) {
      Promise.resolve(p).then(resolve).catch(reject);
    }
  });
};

zcxiaobao avatar Aug 02 '23 02:08 zcxiaobao

const race = (promises) => {
  return new Promise((resolve, reject) => {
    promises.forEach(item => {
      item.then(resolve).catch(reject);
    })
  })
}

Windseek avatar Nov 08 '24 02:11 Windseek