gpt4 book ai didi

javascript - 获取 API 请求超时?

转载 作者:IT王子 更新时间:2023-10-29 02:56:59 25 4
gpt4 key购买 nike

我有一个 fetch-api POST 请求:

fetch(url, {
method: 'POST',
body: formData,
credentials: 'include'
})

我想知道这个的默认超时是多少?我们如何将它设置为特定值,例如 3 秒或无限秒?

最佳答案

使用 promise race 解决方案将使请求挂起并仍然在后台消耗带宽,并降低仍在处理中时允许发出的最大并发请求。

改为使用 AbortController实际中止请求,这是一个例子

const controller = new AbortController()

// 5 second timeout:

const timeoutId = setTimeout(() => controller.abort(), 5000)

fetch(url, { signal: controller.signal }).then(response => {
// completed request before timeout fired

// If you only wanted to timeout the request, not the response, add:
// clearTimeout(timeoutId)
})

或者您可以使用新添加的 AbortSignal.timeout(5000) ... 但它目前在大多数浏览器中都没有得到很好的实现。 现在所有的绿色环境都有这个。您将失去对手动关闭请求的控制。上传和下载都必须在 5 秒内完成

// a polyfill for it would be:
AbortSignal.timeout ??= function timeout(ms) {
const ctrl = new AbortController()
setTimeout(() => ctrl.close(), ms)
return ctrl.signal
}


fetch(url, { signal: AbortSignal.timeout(5000) })

AbortController 还可以用于其他用途,不仅可以获取数据,还可以用于可读/可写流。越来越多的新功能(特别是基于 promise 的功能)将越来越多地使用它。 NodeJS 还在其流/文件系统中实现了 AbortController。我知道网络蓝牙也在研究它。现在它也可以与 addEventListener 选项一起使用,并让它在信号结束时停止监听

关于javascript - 获取 API 请求超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com