阅读 84

fetch 设置超时断开请求

AbortController.abort()

中止一个尚未完成的Web(网络)请求。这能够中止fetch 请求,任何响应Body的消费者和流

Promise.race()

race 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。 如果传的迭代是空的,则返回的 promise 将永远等待。 如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则 Promise.race 将解析为迭代中找到的第一个值。

返回第一个完成的Promise

 /**  * 实现fetch的timeout 功能  * @param {object} fecthPromise fecth  * @param {Number} timeout 超时设置,默认5000ms  * */ let controller = new AbortController(); export function fetch_timeout(fecthPromise, timeout = 6000) {   let abort: any = null;   let abortPromise = new Promise((resolve, reject) => {     abort = () => {       return reject({         code: 504,         message: '请求超时!',       });     };   });    // 最快出结果的promise 作为结果   let resultPromise = Promise.race([fecthPromise, abortPromise]);   setTimeout(() => {     abort();     controller.abort();   }, timeout);   return resultPromise.then((res) => {     clearTimeout(timeout);     return res;   }); }


作者:我可能会飞
链接:https://juejin.cn/post/7021031664037920805


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐