fetch函数没有默认超时时间的配置吗

 chatgpt:

https://chat.xutongbao.top/

截至我知识的最后更新时间(2023年),原生的 fetch API 在大多数浏览器中并没有内置的默认超时时间。这意味着如果你没有明确地设置一个超时期限,fetch 请求可能会永远挂起(或者直到浏览器决定停止尝试为止)。

如果你需要设置超时,你可以自己实现一个超时机制。以下是一个在JavaScript中使用 fetch API 时设置超时的例子:

const fetchWithTimeout = (resource, options = {}) => {
  const { timeout = 8000 } = options; // 设置默认超时时间为8000ms

  const controller = new AbortController();
  const id = setTimeout(() => controller.abort(), timeout);

  const response = fetch(resource, {
    ...options,
    signal: controller.signal
  }).then((response) => {
    clearTimeout(id);
    return response;
  }).catch((error) => {
    clearTimeout(id);
    throw error;
  });

  return response;
};

// 使用这个函数进行fetch请求并设置超时
fetchWithTimeout('https://your-api-endpoint.com', { timeout: 5000 }) // 设置5秒的超时
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Request timed out or another error: ', error));

在这个例子中,我们创建了一个名为 fetchWithTimeout 的新函数,它接受一个资源URL和一个选项对象。该函数使用了AbortController,这是一个可让你通过调用其 abort 方法终止一个网络请求的API。如果在超时时间内没有收到响应,AbortControllerabort 方法会被调用,这会导致 fetch 请求被取消。请注意,AbortController 是较新的 API,尽管得到了良好的浏览器支持,但在使用之前仍然值得检查目标用户的浏览器。

值得注意的是,服务器端的 fetch 实现(如在Node.js环境中使用的 node-fetch)可能会有不同的行为或配置选项,因此如果你在服务器环境中工作,你应该查阅相应库的文档以确定如何设置超时。

chatgpt stream模式请求超时设置:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <textarea id="input"></textarea>
    <div>
      <button onclick="handleSend()">发送</button>
    </div>
    <div id="result"></div>
    <script>
      async function handleSend() {
        let messageHot = ''
        document.getElementById('result').innerHTML = ''

        let content = document.getElementById('input').value
        document.getElementById('input').value = ''

        const fetchWithTimeout = (resource, options = {}) => {
          const { timeout = 8000 } = options // 设置默认超时时间为8000ms

          const controller = new AbortController()
          const id = setTimeout(() => controller.abort(), timeout)

          const response = fetch(resource, {
            ...options,
            signal: controller.signal,
          })
            .then((response) => {
              clearTimeout(id)
              return response
            })
            .catch((error) => {
              clearTimeout(id)
              throw error
            })

          return response
        }

        // 使用这个函数进行fetch请求并设置超时
        // fetchWithTimeout('https://your-api-endpoint.com', { timeout: 5000 }) // 设置5秒的超时
        //   .then((response) => response.json())
        //   .then((data) => console.log(data))
        //   .catch((error) =>
        //     console.error('Request timed out or another error: ', error)
        //   )

        const response = await fetchWithTimeout(
          `https://chat.xutongbao.top/api/light/chat/createChatCompletion`,
          {
            timeout: 30 * 60 * 1000,
            method: 'post',
            headers: {
              'Content-Type': 'application/json',
              Accept: 'text/event-stream',
            },
            body: JSON.stringify({
              model: 'gpt-3.5-turbo-1106',
              token: 'sk-3d76d415-dd72-43ff-b7c8-65fb426f1d7b',
              messages: [
                {
                  role: 'user',
                  content,
                },
              ],
              params: {
                n: 1,
                stream: true,
              },
            }),
          }
        )

        if (!response.body) return

        const reader = response.body.getReader()
        // 创建了一个文本解码器
        const decoder = new TextDecoder()

        let count = 0
        reader.read().then(function processText({ done, value }) {
          if (done) {
            messageHot += '【结束】'
            document.getElementById('result').innerHTML = messageHot
            return
          }
          let text = decoder.decode(value)
          if (text) {
            if (
              text.length > 9 &&
              text.slice(text.length - 9) === 'undefined'
            ) {
              text = text.slice(0, text.length - 9)
            }
            let start852Index = text.indexOf('start852')
            let end852Index = text.indexOf('end852')

            if (start852Index >= 0 && end852Index >= 0) {
              let headerData = text.slice(start852Index + 8, end852Index)
              console.log('headerData', headerData)
              text = text.slice(end852Index + 6)
            }

            messageHot += text
            document.getElementById('result').innerHTML = messageHot
            count++
            console.log('次数', count, text)
          }

          return reader.read().then(processText)
        })
      }
    </script>
  </body>
</html>

参考链接:

https://chat.xutongbao.top/

https://blog.csdn.net/xutongbao/article/details/134337330?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/135693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-静态查找、二分查找、分块查找

静态查找 在静态查找表中&#xff0c;我们只允许下面两件事&#xff1a; 1.在查找表中查找某个记录是否在表中 2.查找表中记录的各个属性 动态查找 在动态查找表中&#xff0c;我们允许四件事&#xff1a; 1.在查找表中查找某个记录是否在表中 2.查找表中记录的各个属性…

国际阿里云:Windows实例中数据恢复教程!!!

在处理磁盘相关问题时&#xff0c;您可能会碰到操作系统中数据盘分区丢失的情况。本文介绍了Windows系统下常见的数据盘分区丢失的问题以及对应的处理方法&#xff0c;同时提供了使用云盘的常见误区以及最佳实践&#xff0c;避免可能的数据丢失风险。 前提条件 已注册阿里云账…

财务报告是什么

财务报告是什么 财务报告是企业对外提供的反映企业某一特定日期的财务状况和某一会计期间的经营成果、现金流量等会计信息的文件。 根据财务报告的定义&#xff0c;财务报告具有以下几层含义&#xff1a;一是财务报告应当是对外报告&#xff0c;其服务对象主要是投资者、债权人…

HCIA-经典综合实验(一)

经典综合实验&#xff08;一&#xff09; 实验拓扑配置步骤第一步&#xff1a;配置二层VLAN第二步&#xff1a;配置IP地址第三步&#xff1a;配置DHCP服务第四步&#xff1a;配置路由协议OSPF第五步&#xff1a;配置ACLNATTelnet 配置验证测试PC1能不能telnet登录到R1测试所有P…

Ubuntu取消sudo的输入密码

Ubuntu最近要安装软件&#xff0c;每次sudo都要输入一次密码&#xff0c;感觉很麻烦&#xff0c;于是想能不能设置为不输入密码&#xff0c;在网上找了一下解决办法。 主要参考这篇文章&#xff1a; Ubuntu取消sudo时输入密码 上面这篇文章使用的是vim&#xff0c;但是按照博…

外部董事的职责与作用

&#xff08;一&#xff09;监督公司的管理与运营 外部董事在公司治理中的一个重要职责就是监督公司的管理与运营&#xff0c;监督公司管理层是否有效执行公司战略、规章制度和内控机制&#xff0c;帮助公司识别管理和运营上的问题&#xff0c;从而提供正确的决策和解决方案。比…

泉峰控股发布业务白皮书, 释放中国芯片企业要发展成全球领先的信心与决心

近日,多元化芯片全球供应商泉峰控股发布了一份题为《致力于中国芯片产业自立自强》的业务白皮书。白皮书系统阐述了泉峰控股企业发展策略和业务规划,充分体现出中国芯片企业要在全球范围内实现技术突破、市场扩张的信心与决心。 白皮书首先分析了当前全球芯片产业的发展态势。在…

js 加密解密 cryptojs(对称加密库)

js 加密解密可以使用 crypto-js 这是一个对称加密的库&#xff0c; 可以使用 AES DES 但没有 rsa 等非对称加密的方法 安装方法 npm install crypto-js 它可以进行 MD5 SHA-1 SHA-256 Base64 AES DES 等算法和加密 import crypto from "crypto-js"let md5binary cry…

docker安装AWVS 23.9.231005181

本文声明仅AWVS用作学习使用 将镜像文件secfa_awvs.tar复制到目标机器上。 我的百度网盘文件路径&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1frbOH4UZlMz9bMXyZs1o0g 提取码&#xff1a;na6y –来自百度网盘超级会员V6的分享 在目标机器上&#xff0c;使用以下命…

macOS Big Sur(macos11版本)

macOS Big Sur是苹果推出的最新操作系统&#xff0c;具有以下特点&#xff1a; 全新的设计风格&#xff1a;Big Sur采用了全新的设计语言&#xff0c;包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…

jQuery和BootStrap

文章目录 jQuery1、jQuery介绍2、jQuery的选择器2.1、直接查找2.2、导航查找 3、jQuery的绑定事件4、jQuery的操作标签5、jQuery的动画5.1、基本方法5.2、自定义动画 6、扩展方法 (插件机制)7、BootStrap jQuery 1、jQuery介绍 jQuery是什么 jQuery是一个快速、简洁的JavaSc…

华为ensp:ppp+CHAP认证

如果一头开启了认证&#xff0c;如果对面没有输入认证则双方无法通信 开启ppp r1和r2在系统视图模式进行同样的操作 interface Serial 1/0/0 link-protocol pppquit 开启ppp R1 去r1设置chap认证用户和密钥 进入系统视图 interface Serial 1/0/0 ppp authentication-m…

Django视图函数和资源

文章目录 1.视图1.1 文件or文件夹1.2 相对和绝对导入urls1.3 视图参数1.4 返回值1.5 响应头1.6 FBV和CBV 2.静态资源2.1 静态文件2.2 媒体文件 1.视图 1.1 文件or文件夹 1.2 相对和绝对导入urls 注意实现&#xff1a;不要再项目根目录做相对导入。 原则&#xff1a; 绝对导入…

PanNet: A deep network architecture for pan-sharpening(ICCV 2017)

文章目录 AbstractIntroduction过去方法存在的问题我们提出新的解决方法Related work PanNet: A deep network for pan-sharpening&#xff08;PanNet:用于泛锐化的深度网络&#xff09;Background and motivationPanNet architectureSpectral preservationStructural preserva…

windows HOOK学习(一)

了解HOOK 一&#xff1a;HOOK是什么&#xff1f;二&#xff1a;HOOK的分类三&#xff1a;HOOK的原理&#xff1f;四&#xff1a;为什么全局钩子HOOK必须写到DLL中&#xff1f;五&#xff1a;HOOK的类型 一&#xff1a;HOOK是什么&#xff1f; hook就是我们平时听到的钩子&…

vue2 数字软键盘 封装 可拖动 使用简单

1、效果图 2、使用方式 <Keyboard v-if"show" close"show false" :inputDom"$refs.input" /> 封装的数字键盘 Keyboard.vue 组件代码 <template><divclass"keyboard"ref"keyboard":style"{ left: …

算法通关村第八关-白银挑战二叉树的深度和高度问题

大家好我是苏麟 , 今天说说几道二叉树深度和高度相关的题目 . LeetCode给我们造了一堆的题目&#xff0c;研究一下104、110和111三个题&#xff0c;这三个颗看起来挺像的&#xff0c;都是关于深度、高度的。 最大深度问题 描述 : 二叉树的 最大深度 是指从根节点到最远叶子…

SharePoint 是什么

SharePoint 平台使您能够以在线方式和本地方式轻松地管理和协调业务数据。因为其灵活性和易使用性&#xff0c;公司可以快速采用SharePoint来管理其业务数据。 SharePoint Microsoft 365 一种基于云的服务&#xff0c;由 Microsoft 托管&#xff0c;适用于各种规模的企业。 任何…

【Redis】redis-server和redis-cli

上一篇《redis 的下载和安装》 https://blog.csdn.net/m0_67930426/article/details/134341071?spm1001.2014.3001.5501 安装完之后开始使用 打开客户端之前需要先打开服务端 redis-server 直接使用该命令打开就行 然后在打开客户端 redis-cli 使用ping命令查看是否连接服…

云原生 黑马Kubernetes教程(K8S教程)笔记——kubernetes介绍。Master集群控制节点、Node工作负载节点、Pod控制单元

参考文章&#xff1a;kubernetes介绍 文章目录 1. Kubernetes介绍1.1 应用部署方式演变传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上虚拟化部署&#xff1a;可以在一台物理机上运行多个虚拟机&#xff0c;每个虚拟机都是独立的一个环境&#xff…