add Toolkit.setRandomInterval

This commit is contained in:
Timi
2025-12-03 11:50:32 +08:00
parent 00816f223a
commit b9783b1f0c

View File

@@ -142,15 +142,25 @@ export default class Toolkit {
}
/**
* 生成随机数
* 生成随机数(整数)
*
* @param min 最小值
* @param max 最大值
* @param min 最小值
* @param max 最大值
*/
public static random(min = 0, max = 100): number {
return Math.floor(Math.random() * (max + 1 - min)) + min;
}
/**
* 生成随机数(浮点数)
*
* @param min 最小值
* @param max 最大值
*/
public static randomDouble(min = 0, max = 1): number {
return Math.random() * (max - min) + min;
}
/**
* Base64 数据转文件
*
@@ -334,4 +344,53 @@ export default class Toolkit {
}
return value;
};
/**
* 设置随机间隔执行
*
* @param config 配置对象
* @param config.handler 处理函数,如果提供了 min 和 max则会接收随机数作为参数
* @param config.handleRate 执行概率0-1 之间,默认 1总是执行
* @param config.interval 间隔时间(毫秒)
* @param config.min 随机数最小值(可选),提供时会生成随机数传给 handler
* @param config.max 随机数最大值(可选),提供时会生成随机数传给 handler
* @returns 定时器 ID
*
* @example
* ```js
* // 简单的随机执行
* setRandomInterval({
* handler: () => console.log('executed'),
* handleRate: 0.5,
* interval: 1000
* })
*
* // 带随机数参数的执行
* setRandomInterval({
* handler: (value) => console.log('random value:', value),
* handleRate: 1,
* min: 0,
* max: 100,
* interval: 1000
* })
* ```
*/
public static setRandomInterval(config: {
handler: Function | ((value: number) => void);
handleRate?: number;
interval?: number;
min?: number;
max?: number;
}): NodeJS.Timeout {
const { handler, handleRate = 1, interval, min, max } = config;
return setInterval(() => {
if (Math.random() < handleRate) {
if (min !== undefined && max !== undefined) {
(handler as (value: number) => void)(this.randomDouble(min, max));
} else {
(handler as Function)();
}
}
}, interval);
}
}