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

分类: JavaScript 标签: 定时器promiserece超时取消结束等待

评论

暂无评论数据

暂无评论数据

目录