Skip to content

delayExec

delayExec 是一个延迟执行插件,用于延迟流中操作的执行时间。

类型定义

typescript
delayExec: (delay: number) => {
  execute: ({
    result,
    status,
    onfulfilled,
    onrejected,
    root,
  }: {
    result: Promise<any> | any
    status: PromiseStatus | null
    onfulfilled?: OnFulfilled
    onrejected?: OnRejected
    root: boolean
  }) => Promise<any>
}

参数

  • delay (必需): 延迟时间,单位为毫秒

详细说明

  • 延迟指定时间后再执行后续操作
  • 对于同步值,会将其包装为 Promise 并延迟执行
  • 对于 Promise 值,会等待 Promise 解析后再延迟执行
  • 返回一个 Promise,在延迟时间后解析为原始结果
  • 不修改数据流的值,只影响执行时机

示例

场景 1:基本延迟执行

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const stream$ = $().use(delayExec(1000)) // 延迟 1 秒

stream$.then((value) => {
  console.log('执行时间:', Date.now())
  return value
})

console.log('开始时间:', Date.now())
stream$.next(1)
// 1 秒后输出: 执行时间: [时间戳]

场景 2:流链中的延迟执行

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const promise$ = $()

promise$
  .then((value) => {
    console.log('第一步:', value)
    return value + 1
  })
  .use(delayExec(500)) // 延迟 500ms
  .then((value) => {
    console.log('第二步:', value)
    return value + 1
  })

promise$.next(1)
// 立即输出: 第一步: 1
// 500ms 后输出: 第二步: 2

场景 3:多个延迟执行

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const promise$ = $()
  .use(delayExec(200))
  .then((value) => value + 1)
  .use(delayExec(300))
  .then((value) => value + 1)

console.log('开始:', Date.now())
promise$.next(1).then((result) => {
  console.log('结束:', Date.now(), '结果:', result)
})
// 500ms 后输出: 结束: [时间戳] 结果: 3

场景 4:与 Promise 结合

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const stream$ = $().use(delayExec(1000))

// 传入 Promise
const promise = Promise.resolve(42)
stream$.next(promise).then((result) => {
  console.log('Promise 结果:', result)
})
// 1 秒后输出: Promise 结果: 42

// 传入同步值
stream$.next(100).then((result) => {
  console.log('同步值结果:', result)
})
// 1 秒后输出: 同步值结果: 100

场景 5:错误处理

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const stream$ = $()
  .use(delayExec(500))
  .then(
    (value) => {
      console.log('成功:', value)
      return value
    },
    (error) => {
      console.log('错误:', error.message)
      throw error
    }
  )

// 传入被拒绝的 Promise
const rejectedPromise = Promise.reject(new Error('测试错误'))
stream$.next(rejectedPromise)
// 500ms 后输出: 错误: 测试错误

场景 6:动态延迟时间

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

function createDelayedStream(delay: number) {
  return $().use(delayExec(delay))
}

const fastStream = createDelayedStream(100)
const slowStream = createDelayedStream(1000)

console.log('开始时间:', Date.now())

fastStream.next('快速').then((result) => {
  console.log('快速完成:', Date.now(), result)
})

slowStream.next('慢速').then((result) => {
  console.log('慢速完成:', Date.now(), result)
})
// 100ms 后输出: 快速完成: [时间戳] 快速
// 1000ms 后输出: 慢速完成: [时间戳] 慢速

场景 7:移除插件

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

const plugin = delayExec(1000)
const stream$ = $().use(plugin)

stream$.then((value) => {
  console.log('延迟执行:', value)
  return value
})

stream$.next(1)
// 1 秒后输出: 延迟执行: 1

stream$.remove(plugin)
stream$.next(2)
// 立即执行,无延迟

场景 8:性能测试

typescript
import { $ } from 'fluth'
import { delayExec } from 'fluth'

async function performanceTest() {
  const delays = [100, 200, 300, 500, 1000]
  
  for (const delay of delays) {
    const start = Date.now()
    const stream$ = $().use(delayExec(delay))
    
    await stream$.next(`延迟 ${delay}ms`)
    const end = Date.now()
    
    console.log(`预期延迟: ${delay}ms, 实际延迟: ${end - start}ms`)
  }
}

performanceTest()