通过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的超时设置
032020-03-13
相似问题