利用Promise实现一个超时结束等待操作
promise如果没有指定状态,那么就一直会处于pending中,如果长时间不处理,那么这个东西会一直存在于内存中,显然是不合理的。如果是一个超多请求项目,那么我们就需要考虑下性能问题了。
promise中有一个rece
方法,它接收一个promise作为值的数组,它的特性就是:哪个promise先执行,他就处理那一个,不管是resolve还是reject;在then中,他也只有一个值,不同于Promise.all
方法返回的是一个数组,rece返回的值是最快完成的那个promise的返回值。
利用这个特性,我们可以制作一个超时处理。
function delayPromise(promise, delay = 1000) {
return Promise.race([
promise,
new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("请求超时"));
}, delay)
})
])
}
function fn1() {
return new Promise((resolve, reject) => {
resolve("请求成功")
})
}
delayPromise(fn1()).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
创建一个函数,函数抛出race
,在接受的数组参数最末尾我们利用promise+setTimeout的方式,创建了一个定时reject的报错,这样,如果请求没有在预期的时间内完成,就会触发定时器的reject;从而结束promise一直在pending的状态。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据