用Promise实现一个请求超时
- 今天面试了一家公司,面试官问了一个‘能不能自己实现一个请求超时’,刚开始还是有点慌的,经过思考有了一些思路
- 请求请求!!第一时间想到的就是promise
- 刚好promise有个api是promise.race([api1,api2…]),这个api会优先返回最快的那一个请求
let rest = function (_data = 4000) {
return Promise.race([
upload(),
Timeout(_data)
])
}
function upload() {
console.log('请求进行中...');
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ data:{code:200,data:[]} })
}, 2000);
cancelFn = function (msg) {
reject('请求超时,请重试');
}
})
};
function Timeout(times) {
return new Promise((resolve, reject) => {
setTimeout(() => {
cancelFn();
}, times)
})
}
let res= rest()
res.then(res=>{
console.log(res);
})
async function async1(){
await async2()
console.log(1);
}
function async2(){
··········
}
async function async1(){
await async2(2000)
console.log(1);
}
function async2(timeout){
return new Promise((resolve,reject)=>{
setTimeout(() => {
resolve()
}, timeout);
})
}
async1()