/** * 任务执行器 * * @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