木灵鱼儿

木灵鱼儿

阅读:209

最后更新:2021/12/19/ 23:54:15

利用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的状态。

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 0
文章被阅读 209

相关文章

目录树