Skip to content

raceWithSignal ​

等待异步任务完成,收到取消信号时提前结束等待。

使用 ​

ts
import { delay, raceWithSignal } from 'rattail'

const controller = new AbortController()
const operation = delay(3000)

setTimeout(() => {
  controller.abort(new Error('Cancelled'))
}, 100)

try {
  await raceWithSignal(operation, { signal: controller.signal })
} catch (error) {
  console.log(error)
  // Error: Cancelled
}

约 100 毫秒后停止等待并进入 catch,原本的 3 秒延迟仍会继续。

参数 ​

参数类型说明
promisePromiseLike<Value>要等待的异步操作
options.signalAbortSignal用于终止等待的信号

返回值 ​

Promise<Awaited<Value>>。返回原始结果或抛出原始异常;若先发生取消,则以原始 signal.reason 拒绝。

说明 ​

  • 信号已经取消时,会立即拒绝等待,即使 Promise 已经完成。
  • 取消等待不会终止底层操作;底层操作支持取消时,还需将信号传给它。