竞态
取消旧的请求
const controller = new AbortController()
fetch('...', { signal: controller.signal })
controller.abort()忽略旧的请求
function onlyResolveLastPromise(func, rejectValue = 'rejected') {
let outReject
return function (...rest) {
if (outReject) {
outReject(rejectValue)
outReject = null
}
return Promise.race([
func.apply(this, rest),
new Promise((resolve, reject) => {
outReject = reject
}),
])
}
}
const queryApi = data => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data)
}, 1000)
})
}
const newQueryApi = onlyResolveLastPromise(queryApi)
newQueryApi(1)
.then(res => console.log(res))
.catch(err => console.error(err))
newQueryApi(2)
.then(res => console.log(res))
.catch(err => console.error(err))最后更新于