first
This commit is contained in:
54
commons/utils/timer.js
Normal file
54
commons/utils/timer.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* 任务执行器
|
||||
*
|
||||
* @author terrfly
|
||||
* @site https://www.jeepay.vip
|
||||
* @date 2022/11/15 16:30
|
||||
*/
|
||||
const model = {
|
||||
|
||||
|
||||
// 任务启动工具, 每 xxs调用一次, 知道多次x次为止。
|
||||
// 注意: 启动后将立马调用一次, 而不是1s后再调用。
|
||||
|
||||
// 参数:
|
||||
// allCount: 全部的次数 (支持promise 并不一定是 秒)
|
||||
// stepSecond : 步伐(单位: 秒)
|
||||
// callbackFunc 回调函数, 支持返回 boolean 或者 promise ,
|
||||
// 注意: boolean类型: true 进入下一次循环, false: 停止任务。
|
||||
// promise类型: then 进入下一次循环, catch: 停止任务。
|
||||
startTimeoutTask: (stepSecond, allCount, callbackFunc) => {
|
||||
|
||||
// 不存在回调函数
|
||||
if(!callbackFunc){
|
||||
return false;
|
||||
}
|
||||
|
||||
let callbackResult = callbackFunc(allCount)
|
||||
|
||||
// 明确返回false, 说明不再循环
|
||||
if(callbackResult === false){
|
||||
return false
|
||||
}
|
||||
|
||||
// 不包含剩余次数了。
|
||||
if(allCount <= 0){
|
||||
return false
|
||||
}
|
||||
|
||||
// promise
|
||||
if(typeof callbackResult == 'object'){
|
||||
|
||||
callbackResult.then(() => {
|
||||
setTimeout(() => model.startTimeoutTask(stepSecond, --allCount, callbackFunc), (stepSecond * 1000) )
|
||||
})
|
||||
|
||||
}else{ // 其他boolean类型, 或返回不明确, 继续下一次任务。
|
||||
|
||||
setTimeout(() => model.startTimeoutTask(stepSecond, --allCount, callbackFunc), (stepSecond * 1000) )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default model
|
||||
|
||||
Reference in New Issue
Block a user