jiefancis / blogs

个人博客,学习笔记(issues)
1 stars 0 forks source link

promise系列:巧用race处理ajax请求超时 #12

Open jiefancis opened 3 years ago

jiefancis commented 3 years ago

有请求request,请求设定2s超时,如何实现超时处理?

function cb(){ let prevStamp = Date.now(); return new Promise((resolve , reject) => {

    let timer = setTimeout(() => {
        let nowStamp = Date.now();
        if(nowStamp - prevStamp > 2000){
            reject('timeout')
        }
    },2000)

    request().then(res => {
        resolve(res)
        clearTimeout(timer)
    })
})

}

cb().then(res => console.log('resolve', res)) .catch(err => console.log('timeout',err))

 - promise提供race处理多个promise优先执行的状态

function request(){ return new Promise((resolve, reject) => { setTimeout(() => { resolve('resolved') }, Math.random() * 5000) }) }

function cb(){ let timeout = () => new Promise((resolve, reject) => { setTimeout(() => { reject('timeout') }, 2000) })

let promises = [ request(), timeout() ]

return Promise.race(promises) }

cb().then(res => console.log('resolve', res)) .catch(err => console.log('timeout',err))