promise
Promise 工具函数。
导入
typescript
import {
isPromiseLike,
promiseDelay,
promiseTimeout,
promiseWhen,
promiseShared,
createMinDelayPromise,
} from '@cloudcome/utils-core/promise';函数
isPromiseLike
判断是否为类 Promise 对象。
typescript
function isPromiseLike<T>(unknown: unknown): unknown is Promise<T>;参数
| 参数 | 类型 | 描述 |
|---|---|---|
| unknown | unknown | 要检查的值 |
返回值
unknown is Promise<T> - 是否为类 Promise 对象
示例
typescript
isPromiseLike(Promise.resolve()); // true
isPromiseLike({ then: () => {} }); // true
isPromiseLike({}); // false
isPromiseLike(null); // falsepromiseDelay
延迟执行。
typescript
function promiseDelay(ms?: number, ctrl?: AbortController): Promise<void>;参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ms | number | 0 | 延迟时间(毫秒) |
| ctrl | AbortController | - | 可选,用于取消延迟 |
返回值
Promise<void>
示例
typescript
// 基本用法
await promiseDelay(1000); // 延迟 1 秒
// 使用 AbortController 取消
const ctrl = new AbortController();
setTimeout(() => ctrl.abort(), 500); // 500ms 后取消
await promiseDelay(1000, ctrl); // 不会等待 1 秒promiseTimeout
为 Promise 添加超时。
typescript
function promiseTimeout<T>(promise: Promise<T>, ms: number): Promise<T>;参数
| 参数 | 类型 | 描述 |
|---|---|---|
| promise | Promise<T> | 原始 Promise |
| ms | number | 超时时间(毫秒) |
返回值
Promise<T> - 带超时的 Promise
示例
typescript
// 基本用法
const data = await promiseTimeout(fetch('/api/data'), 5000); // 5 秒超时
// 超时会抛出错误
try {
await promiseTimeout(promiseDelay(10000), 1000); // 1 秒超时
} catch (error) {
console.error('Timeout!'); // 会执行这里
}promiseWhen
等待条件满足。
typescript
function promiseWhen(condition: () => boolean, ms?: number): Promise<void>;参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| condition | () => boolean | - | 条件函数 |
| ms | number | 10 | 检查间隔(毫秒) |
返回值
Promise<void>
示例
typescript
let count = 0;
const interval = setInterval(() => {
count++;
}, 100);
// 等待 count >= 5
await promiseWhen(() => count >= 5, 50);
console.log(count); // >= 5
clearInterval(interval);promiseShared
共享 Promise,避免重复请求。
typescript
function promiseShared<T>(promise: Promise<T>): Promise<T>;参数
| 参数 | 类型 | 描述 |
|---|---|---|
| promise | Promise<T> | 原始 Promise |
返回值
Promise<T> - 共享的 Promise
示例
typescript
let callCount = 0;
const fetchData = () => {
callCount++;
return promiseDelay(100).then(() => 'data');
};
// 多次调用共享的 Promise
const shared = promiseShared(fetchData());
const [result1, result2] = await Promise.all([shared, shared]);
console.log(result1); // 'data'
console.log(result2); // 'data'
console.log(callCount); // 1,只调用了一次createMinDelayPromise
创建最小延迟函数。
typescript
function createMinDelayPromise(ms: number): () => Promise<void>;参数
| 参数 | 类型 | 描述 |
|---|---|---|
| ms | number | 最小延迟时间(毫秒) |
返回值
() => Promise<void> - 延迟函数
示例
typescript
const minDelay = createMinDelayPromise(500);
// 使用最小延迟
const start = Date.now();
await minDelay();
const elapsed = Date.now() - start;
console.log(elapsed >= 500); // true
// 配合异步操作使用
const minDelay2 = createMinDelayPromise(1000);
async function loadData() {
const delay = minDelay2();
const data = await fetch('/api/data');
await delay; // 确保至少等待 1 秒
return data;
}