通过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,因此还可以用于同一资源多处获取吗,这是我的疑问,求解答,谢谢!
登录后可查看更多问答,登录/注册