这个就比较简单了,返回最先执行完的那一个promise就OK

思路:

:::success race最后也是返回一个Promise对象,并且then之后,拿到的最先执行完毕的Promise结果
所有我们直接 返回一个Promise,在内部遍历PromiseArr,然后then就行 :::

代码

  1. Promise._race = function (promiseArr) {
  2. return new Promise((resolve, reject) => {
  3. promiseArr.forEach(item => {
  4. // 如果不是promise,则需要转化为promise
  5. Promise.resolve(item).then(
  6. val => resolve(val),
  7. err => reject(err)
  8. )
  9. })
  10. })
  11. }
  12. // test
  13. let promise1 = new Promise((resolve, reject) => {
  14. setTimeout(() => resolve(111), 2000)
  15. })
  16. let promise2 = new Promise((resolve, reject) => {
  17. setTimeout(() => resolve(222), 1500)
  18. })
  19. let promise3 = new Promise((resolve, reject) => {
  20. setTimeout(() => resolve(333), 2500)
  21. })
  22. let promiseArr = [promise1, promise2, promise3]
  23. Promise._race(promiseArr).then((val) => {
  24. console.log(val)
  25. })

image.png