通过race获取资源的疑问

来源:2-43 Race(异步操作)

qq_慕侠0094731

2020-03-11

通过race可以实现资源竞争获取,取多个Promise最先改变状态返回的结果,但是如果其中一个最先改变状态,但是状态变为了rejected,那么race的状态也会变为rejected,请问是不是就获取不到资源了,我这边写了一个demo,现实只会获取最先改变状态的错误信息,不会获取后面promise正确返回的结果

function promise1 (a) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (a > 0) {
        resolve(a)
      } else {
        // eslint-disable-next-line prefer-promise-reject-errors
        reject('错误')
      }
    }, 3000)
  })
}
function promise2 (a) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (a < 0) {
        resolve(a)
      } else {
        // eslint-disable-next-line prefer-promise-reject-errors
        reject('错误')
      }
    }, 2000)
  })
}
let race = Promise.race(promise1(2), promise2(2)).then(res => {
  console.log(res, 'res')
}).catch(err => {
  console.log(err, '错误了')
})

输出错误信息,并不能获取peomise返回的2,因此还可以用于同一资源多处获取吗,这是我的疑问,求解答,谢谢!
图片描述

写回答

1回答

快乐动起来呀

2020-03-13

其实不能这么理解,正常情况两个资源只有快慢之分,而且就算异常,按照浏览器的超时设置也会大于资源响应,除非两个资源A异常,B正常但返回时间大于A的超时设置

0
3
qq_慕侠0094731
回复
快乐动起来呀
懂了,谢谢老师!
2020-03-13
共3条回复

再学JavaScript ES(6-10)全版本语法大全

前端无门槛学习,从ES6到ES10,一套课程掌握JS最新语法

1182 学习 · 336 问题

查看课程