Skip to content
On this page

delay延迟函数

Hidden Title

基础用法:await delay(1000)

基础用法

说明

delay 用于创建一个延迟结束的 Promise,适合在异步流程中等待一段时间,或在延迟结束后执行一个回调函数。

调用形式

ts
await delay(delay)
await delay(delay, callback)
await delay(delay)
await delay(delay, callback)

参数说明

参数类型必填默认值说明
delaynumber0延迟时间,单位毫秒。
callback() => void-延迟结束后立即执行的回调函数。

返回值

返回 Promise<void>。定时器结束后会先执行 callback,再 resolve。

常用场景

ts
await delay(1000)

await delay(300, () => {
  console.log('延迟结束')
})

loading.value = true
await delay(500)
loading.value = false
await delay(1000)

await delay(300, () => {
  console.log('延迟结束')
})

loading.value = true
await delay(500)
loading.value = false

注意事项

delay 不会取消定时器,也不会捕获 callback 内部异常。若回调里可能抛错,建议在回调内部自行处理。

函数源码

delay

来源:packages/utils/src/base.ts

/**
 * 一个辅助函数,用于在代码中创建一个暂停(延迟)。
 * 它返回一个 Promise,你可以在 `await` 后使用它来实现类似 "delay" 的效果。
 *
 * @param delay - 等待的毫秒数。默认值为 0,表示不延迟。
 * @param fn - (可选) 一个在延迟结束后立即执行的函数。
 *
 * @returns 一个 Promise,当延迟结束后解析(resolve)。
 *
 * @example
 * // 基本用法:延迟 2 秒后打印消息
 * console.log('开始');
 * await delay(2000);
 * console.log('2秒后执行');
 *
 * @example
 * // 带回调函数的用法:延迟 1 秒后执行清理工作
 * delay(1000, () => {
 *   console.log('执行清理操作...');
 *   // 清理代码...
 * });
 *
 * @example
 * // 在循环中使用:每次迭代后延迟 500 毫秒
 * for (let i = 0; i < 5; i++) {
 *   console.log(`当前值: ${i}`);
 *   await delay(500);
 * }
 */
export function delay(delay: number = 0, fn?: () => void) {
  return new Promise<void>((resolve) =>
    setTimeout(() => {
      fn?.()
      resolve()
    }, delay),
  )
}

思云博智私有前端组件库