首页 > 其他分享 >如何给fetch添加超时功能

如何给fetch添加超时功能

时间:2023-06-13 16:13:33浏览次数:43  
标签:const request 添加 timeOut reject new 超时 fetch

目前大部分的实现方式是利用 promise.race

const fetchTimeOut = (timeout = 1000) => {
    return new Promise((resolve, reject) => {
        setTimeOut(() => {
           reject('fetch timeOut')
        },timeout)
    })
}
const request = (url, options) => {
    
   const fetchApi = fetch(url, options).then(resolve, reject)
   
   return new Promise.race([ fetchApi, fetchTimeOut(2000) ]).then((res) => {
             //接口请求成功
          }).catch((cat) => {
             //接口超时
             console.log(cat)
          })
   
}
function request(url, option){
   const timeOut = option.timeOut || 5000
}
// 但是每次调用request都需要传递时间,如果不传将会固定死项目中的超时时间,丧失了通用性

 

以下介绍一种方式 更好的来实现

function createFetchWithTimeout(timeOut = 1000){
   return function(url, options){
       return new Promise((resolve, reject) => {
          const singalController = new AbortController()
          fetch(url, {
             ...options,
             signal: singController.signal
          }).then(resolve, reject)
          setTimeout(() => {
               reject(new Error('fetch timout'))  //如果fetch的resolve成功了,这里的reject将不会生效,因为promise的状态只会修改第一次
               //取消请求
               singalController.abort()
          },timeOut)
       })
   }
}

const request = createFetchWithTimeout(2000)
request('/xxxx/xxx', data)

const request2 = createFetchWithTimeout(3000)
request('/xxxx/xxx2', data2)

 

标签:const,request,添加,timeOut,reject,new,超时,fetch
From: https://www.cnblogs.com/xuhuang/p/17477816.html

相关文章

  • nginx添加第三方模块
    1.理念nginx除了支持内置模块,还支持第三方模块,但是第三方模块需要重新编译进nginx。(重新生成nginx二进制命令)1.如你的nginx默认不支持https2.给你的nginx添加echo模块,用于打印nginx的变量。 2.编译添加echo模块echo-nginx-module 模块可以在Nginx中用来输出一些信息......
  • 忽略git上传的文件,修改添加.gitignore
    git#忽略编译输出文件夹/target//build//out//bin//.settings/#忽略IDE和编辑器生成的文件和文件夹.idea/.eclipse/.vscode/*.iml#忽略依赖文件夹/node_modules//bower_components/#忽略操作系统生成的文件.DS_StoreThumbs.db#忽略日志文件*.log#......
  • mapbox添加自定义控件
    需要定义一个类,然后至少重写实现onAdd、onRemove方法,示例如下<template><divref="changeViewRef"@click="changeView"class="changeViewmapboxgl-ctrl"><el-tooltipclass="box-item"effect="dark"......
  • 3dmax编辑常用按钮添加
    显示按钮,点击带笔的小图标修改按钮......
  • Mac下添加java环境变量
    发现一个坑:最近发现有同事按照本文方式配置jdk环境变量一直不成功,后来发现他是使用了“Oh-My-Zsh”,配置文件的路径不是/etc/profile或~/.bash_profile,它有自己的配置文件,所以还是推荐大家使用mac自带的终端或者iTerm2来配置。————————正文开始——————-Mac下添加java环......
  • Navicat Premium将关系和实体添加到概念模型的方法
    NavicatPremium是一款强大的跨平台数据库管理工具,支持多种主流的关系型数据库系统,包括MySQL、MariaDB、SQLite、Oracle、PostgreSQL和MicrosoftSQLServer等。它提供了直观易用的用户界面和丰富的功能,使得数据库管理变得更加简单和高效。要添加关系,请单击工具栏中的新关系......
  • win11 右键添加 .md 文件快捷方式
    尝试用常用方法添加.xmind.md文件,xmind文件成功,但是md文件不成功,因此记录解决方法参考详细方法https://www.cnblogs.com/stblack/p/16637219.html注册表相关https://www.cnblogs.com/sepmaple/articles/9401215.html问题:按照常用方法添加后右键还是不出现md项解决:直......
  • odoo14在tree、kanban视图上添加dashboard
    效果图:  实现代码:js:view的类型原来1个js给拆分成了4个:view,controller,renderer,model​​1、view:AbstractView​​的子类,这是工厂类:类需要解析 ​​arch​​字段并设置其它3个类2、Renderer:渲染器,来自 ​​AbstractRenderer:负责在用户界面中展示数据;​​3、Contr......
  • 如何使用https://work.weixin.qq.com/ca/xxxxx来跳转企业微添加好友?
    工作微信是一款由腾讯公司开发和提供的企业级通信和协作平台。它是基于腾讯QQ和微信的技术基础,专为企业内部通信和协作需求而设计的。工作微信的来源可以追溯到腾讯的战略发展和市场需求。腾讯在观察到企业内部通信和协作的需求日益增长后,决定开发一款专门针对企业用户的通信平台。......
  • Android Studio 添加安卓虚拟设备时提示 No emulator installed
    在设置页面勾选两个工具即可,我遇到的情况是明明已经安装了这两个工具还是提示没有安装,于是我取消勾选把两个安装好的工具删除了,再勾选重新安装。果不其然就提示安装失败,不慌再试一遍,第二次安装过程中没报错了,再次添加安卓设备,成功启动了。 ......