函数中间件
发布于 7 年前 作者 DavidWangDong 2906 次浏览 来自 分享

如何让数据在函数列表中流动,并且灵活的控制其流动过程 Function.prototype.addMiddle=function(fn){ if (!this._fnList){ this._fnList=[] this._fnList.push(this); } if (!this._finalFunc){ this._finalFunc=function(){} } this._fnList.push(fn); var tmpFuncArr = [] for (var i=0,len = this._fnList.length-1;i<=len;i++){ if (i==0){ tmpFuncArr.unshift(this._fnList[len].bind(this,function(){})) }else{ var func = this._fnList[len-i].bind(this,tmpFuncArr[0]) tmpFuncArr.unshift(func) }

				}
				this._finalFunc = tmpFuncArr[0];
				return this;
			}
		}

用法示例

 function step3 (next,arg){
		console.log('1111');
		next&&next(arg)
	}

	step3.addMiddle(function(next,arg){
		console.log('2222');
		next(arg);
	}).addMiddle(function(next,arg){
		console.log('3333');
		next(arg);
	}).addMiddle(function(next,arg){
		console.log('444');
		console.log(arg);
		next();
	})
	step3._finalFunc(123);
3 回复

这是什么需求啊…感觉有更好的方法解决这个问题啊.看起来有点像Promise的感觉

装饰器模式

回到顶部