一个简单的阻塞式AjaxTaskRunner实现

/**
 *阻塞式定时任务执行器
 */
TaskRunner = Base.extend({
                  
	intervalID : '',
	interval: 1000,//1 second
	running: false,
  
	runTask: function() {
		if(this.running === false) {
			this.running = true;
			this.run(this);
		}
	},
	run: function(){},
	start: function(config){
		if(config.run) {
			this.run = config.run;
		}
		if(config.interval) {
			this.interval = config.interval;
		}
		this.intervalID  = setInterval(this.runTask.bind(this), this.interval);
	},
	stop: function() {
		window.clearInterval(this.intervalID);
	}
});

/**
 * 使用示例
 */
function getAsynchronousUserNo(txtUserNo) {
    var runner = new TaskRunner();
    runner.start({
        run: function(task) {
            Server.sendRequest(
				"org.infinite.oa.port.adapter.ui.user.UserUI.getAsynchronousUserNo", 
                new DataCollection({"role": "manager"}), 
                function(response) {
                    if (response.Status == 1) {
                        if(response.get("userNo")) {
                            $(txtUserNo).value = response.get("userNo");
                            task.stop();// 停止任务,不再执行
                        } else {
                            // 设置任务不在运行中,下次才会继续定时执行
                            task.running = false;
                        }
                    } else {
                        alert(response.Message);
                    }
				}
			);
		},
		interval: 500 
	});
}


你可能感兴趣的:(一个简单的阻塞式AjaxTaskRunner实现)