Promise.race方法网络请求设置超时时间 毫秒 ,如果超过,中断请求,则拒绝显示超时错误 const tioneout = (fetchFunc,ms) => {};
时间: 2024-10-24 17:11:36 浏览: 26
`Promise.race`方法本身并不直接支持设置超时时间。然而,你可以结合`setTimeout`和`AbortController`来实现类似的功能。首先,创建一个`AbortController`,然后在`setTimeout`中检查控制器的状态(如果被取消则中断)。这里是一个简单的示例:
```javascript
// 引入必要的模块
const { AbortController } = window; // 如果在浏览器环境,可能需要import
// 创建一个AbortController实例
const controller = new AbortController();
// 定义超时函数
const timeoutPromise = async (fetchFunc, ms) => {
try {
const timeoutId = setTimeout(() => {
if (!controller.signal.aborted) {
controller.abort(); // 超时时中断请求
throw new Error(`Request timed out after ${ms} milliseconds`);
}
}, ms);
// 使用AbortSignal启动fetch操作
const response = await fetchFunc(controller.signal);
clearTimeout(timeoutId); // 取消超时计时
return response;
} catch (error) when (error instanceofAbortError) {
// 处理超时错误
console.error(error.message);
return null;
}
};
// 调用网络请求并设置超时
timeoutPromise(appServices.ArticleTop(), 5000)
.then((res) => {
if (res) {
console.log('Response:', res);
}
})
.catch((error) => {
console.error('Error:', error);
});
```
在这个例子中,我们创建了一个`AbortController`,并将它的信号传递给`fetchFunc`。如果超时发生,我们通过调用`abort()`来中断请求。这样,即使`fetchFunc`已经运行,也能在指定时间内被取消。
阅读全文