# set_interval

## 功能

注册固定延迟重复回调，并立即返回 `Timer` 对象。每轮回调执行完成后才计算下一次触发时间，因此同一个 interval 不会重入，也不会因为慢回调堆积事件。

## 语法

```bt
timer = set_interval(fn, delay_ms)
```

## 参数

| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ------ | ------ | ------ | ------ | ------ |
| fn | Fn | 是 | 无 | 重复执行的 BT 函数。 |
| delay_ms | Int | 否 | 1 | 间隔毫秒数；小于 1 时按 1 处理。 |

## 返回值

| 类型 | 说明 |
| ------ | ------ |
| Timer | 定时器句柄，可调用 `cancel()` 停止后续触发。 |

## 示例

```bt
count = 0

set_interval(fn(self) {
    count = count + 1

    if count >= 3 {
        self.cancel()
    }

    // 输出：当前次数
    println(count)
}, 10)
```

## 注意事项

- 回调可以声明第一个参数接收当前 `Timer` 对象，便于在回调内部调用 `self.cancel()`。
- 回调不声明参数时，多余的 `self` 参数会被忽略。
- 回调抛错会记录错误，后续 interval 默认继续执行；需要停止时请在回调内捕获错误并取消。
- Web 请求上下文中不能创建定时器。
