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

