test header

异步函数顺序执行的实现(下)

(这个内容很早就写完了,放在了CSDN上,把这半截忘记了。。。)

接上节。

在上面的基础上,我们使用构造函数的方法,把代码重新整理一下(结构)。

function Chain(){
	this.taskList = [], 
	this.errorList = [], 
	this.successList = [],
	this.length = arguments.length;
	for (i = 0; i < this.length; i++) {
		this.taskList.push(arguments[i]);
	}

	this.next = function() {
		if (this.taskList.length > 0){
			this.inject(this.taskList[0]);
		}
		else output.innerText += '任务全部完成';
	}

	this.start = function() {
		this.next();
	}

	this.setTimeout = function(fn, time) {
		//处理setTimeout
	}

	this.ajax = function() {
		//处理ajax
	}
}

再写几个异步的函数用于测试


function A() {
	setTimeout("output.innerText += '第一个异步函数,延迟1秒执行\\n'", 1000);
}

function B() {
	output.innerText += '第二个普通函数,无延迟,立即执行\n';
}

function C() {
	setTimeout(function() {
		output.innerText += '第三个异步函数,延迟1秒执行\n';
	}, 1000);
}

function D(text) {
	output.innerText += '第四个普通函数,自定义文字:' + text + ',无延迟,立即执行\n';
}

function E() {
	ajax({
		url: "test2.html",
    beforeSend:function(){
			output.innerText += '第五个异步ajax函数,读取本页源码\n';
		},
		success: function(){
			output.innerText += '读取完成,执行下一个函数\n';
		}
	})
}

function F() {
	setTimeout(function() {
		output.innerText += '第六个异步函数,延迟1秒执行\n';
	}, 1000);
}

测试

var job = new Chain(A, B, C, function a(){
	D('函数传参');
}, E, F);
job.start();

完整代码测试页面:
https://html50.github.io/chain.js/test2.html

这样算是基本的功能完成了。根据我的测试,如果要应用到具体的工作中,还是使用PROMISE比较靠谱。而且我写的这个函数对于ajax setTimeout的操作不够灵活,不可以嵌套,不可以混合使用。但是这些都是可以改进的,即进行更深的匹配修改。实现的本身也可以当做一种不同的思路吧。

一个异步读取图片并展示的DEMO:
https://html50.github.io/chain.js/

posted @ 2017-10-19 17:07  2byte  阅读(368)  评论(0)    收藏  举报