Promise 工具
sleep
延迟执行。
typescript
import { sleep } from '@baicie/tools'
await sleep(1000) // 延迟 1 秒timeout
超时控制。
typescript
import { timeout } from '@baicie/tools'
await timeout(fetch('...'), 3000) // 3秒超时retry
重试执行。
typescript
import { retry } from '@baicie/tools'
await retry(() => fetch('...'), 3, 1000) // 最多重试3次,间隔1秒promisePool
并发控制(限制同时执行的 Promise 数量)。
typescript
import { promisePool } from '@baicie/tools'
const tasks = urls.map(url => () => fetch(url))
const results = await promisePool(tasks, 3) // 最多同时执行 3 个allSettled
错误处理版 Promise.all。
typescript
import { allSettled } from '@baicie/tools'
const results = await allSettled([
Promise.resolve(1),
Promise.reject(new Error('Error')),
Promise.resolve(3),
])
// 所有 Promise 都会执行,不会因为某个失败而中断serial
串行执行。
typescript
import { serial } from '@baicie/tools'
const results = await serial([
() => fetch('/api/1'),
() => fetch('/api/2'),
() => fetch('/api/3'),
])
// 按顺序执行cancellable
可取消的 Promise。
typescript
import { cancellable } from '@baicie/tools'
const { promise, cancel } = cancellable(fetch('/api'))
cancel() // 取消请求createDeferred
手动控制 Promise。
typescript
import { createDeferred } from '@baicie/tools'
const deferred = createDeferred<number>()
setTimeout(() => deferred.resolve(42), 1000)
const result = await deferred.promise // 42poll
轮询直到满足条件。
typescript
import { poll } from '@baicie/tools'
await poll(
() => checkStatus() === 'ready',
() => fetchStatus(),
1000,
)
// 每 1 秒检查一次,直到状态为 'ready'