// 定义一个组合链子的类 var Chain = function (fn) { this.fn = fn this.successor = null } // 需要匹配的下一个节点 Chain.prototype.setNextSuccessor = function (successor) { return this.successor = successor } // 执行是否调用下一个节点 Chain.prototype.passRequest = function () { // 这里是异步 所以还没有数据执行会跳过到下一个,因此异步要用自己的next var ret = this.fn.apply( this, arguments ); if ( ret === 'nextSuccessor' ){ return this.successor && this.successor.passRequest.apply( this.successor, arguments ); } return ret; } // 异步执行完毕来自己判断是否走下一个节点, // 之前是通过是否返回标志符'nextSuccessor' 因为现在异步 // 就不能根据返回值来决定,只能是在异步时候来手动决定是否 // 调用下个节点 Chain.prototype.next= function(){ return this.successor && this.successor.passRequest.apply( this.successor, arguments ); };
异步节点中调用next的参数应该是调用的地方决定吗?同步链的参数都是由passRequest的入参决定的,那是否意味着next的入参也应该是来源于passRequest呢?否则参数来源将不一致?