# set_timeout

## 功能

注册一次性延迟回调，并立即返回 `Timer` 对象。回调到期后由所属 VM 的单线程事件循环执行一次，回调返回值会被忽略。

## 语法

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

## 参数

| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ------ | ------ | ------ | ------ | ------ |
| fn | Fn | 是 | 无 | 延迟执行的 BT 函数。 |
| delay_ms | Int | 否 | 0 | 延迟毫秒数；负数按 0 处理。 |

## 返回值

| 类型 | 说明 |
| ------ | ------ |
| Timer | 定时器句柄，可调用 `cancel()` 取消尚未触发的回调。 |

## 示例

```bt
fired = false

timer = set_timeout(fn() {
    fired = true
}, 100)

// 输出：false
print fired
```

## 注意事项

- `set_timeout()` 不会同步执行回调；`delay_ms` 为 0 时也会尽快投递到事件队列。
- CLI 脚本存在活动 timeout 时会保持进程，直到回调执行完成或被取消。
- Web 请求上下文中不能创建定时器，请求结束后 VM 会释放。
- 取消定时器的方法见 [Timer.cancel](/docs/system/timer)。
