# 超时与取消请求

URL: https://caijiao.org/ky/timeout-cancel
Source: docs/ky/timeout-cancel.md
Description: 讲解如何在 Ky 中设置请求超时以及使用 AbortController 取消未完成的请求。

在实际项目中，控制请求超时和能够取消未完成请求非常重要。Ky 提供了简单的机制来处理这些场景。

## 设置请求超时

使用 `timeout` 选项设置请求超时时间（单位：毫秒）：

```javascript
import ky from 'ky';

async function fetchData() {
  try {
    const data = await ky.get('https://api.example.com/data', {
      timeout: 5000 // 5秒超时
    }).json();
    console.log(data);
  } catch (error) {
    if (error.name === 'TimeoutError') {
      console.error('请求超时');
    } else {
      console.error('请求出错:', error);
    }
  }
}

fetchData();
````

## 取消请求

使用 `AbortController` 可以取消正在进行的请求：

```javascript
import ky from 'ky';

const controller = new AbortController();

async function fetchData() {
  try {
    const data = await ky.get('https://api.example.com/data', {
      signal: controller.signal
    }).json();
    console.log(data);
  } catch (error) {
    if (error.name === 'AbortError') {
      console.log('请求已取消');
    } else {
      console.error('请求出错:', error);
    }
  }
}

// 触发取消请求
controller.abort();
```

## 小结

* 使用 `timeout` 可设置请求超时时间，提高请求稳定性。
* 使用 `AbortController` 可以在任意时刻取消请求，防止不必要的网络开销。
* Ky 的超时和取消请求机制与原生 Fetch API 一致，使用简单直观。
