Koa中的洋葱模型浅析

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

举个栗子,有如下三个函数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…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值