Koa中的洋葱模型浅析

1,627 阅读1分钟

洋葱模型原理: 把后一个函数当做参数传递给前一个函数,从而实现把多个函数串起来执行的效果。

举个栗子,有如下三个函数fn1, fn2, fn3,洋葱模型的输出结果应该是:1 3 5 6 4 2。注意:参数next是一个函数。

function fn1(next) {
	console.log(1);
	next();
	console.log(2);
}

function fn2(next) {
	console.log(3);
	if(next) next();
	console.log(4);
}

function fn3(next) {
	console.log(5);
	if(next) next();
	console.log(6);
}

1、递归写法

let middlewares = [fn1, fn2, fn3];
function dispatch(index) { 
	if (index === middlewares.length) return;
	let m = middlewares[index++];
	return () => m(dispatch(index))
}
dispatch(0)(); //注意:每次调用dispatch,返回的都是一个函数

2、箭头函数写法

let finalFn = () => fn1(() => fn2(() => fn3()))
finalFn();

3、丑陋的原始嵌套写法

function fn1() {
	console.log(1);
	(function fn2() {
		console.log(3);
		(function fn3(next) {
			console.log(5);
			//next();
			console.log(6);
		})();
		console.log(4);
	})();
	console.log(2);
}
fn1();

推荐文章:segmentfault.com/a/119000001…