- JavaScript 设计模式之用 AOP 实现职责链
- JavaScript 设计模式之职责链模式的优缺点
- JavaScript 设计模式之灵活可拆分的职责链节点
- JavaScript 设计模式之用职责链模式重构代码
- JavaScript 设计模式之现实中的职责链模式
在上几编的职责链模式文章中,我们让每个节点函数同步返回一个特定的值 nextSuccessor
,来表示是否把请求传递给下一个节点。而在现实开发中,我们经常会遇到一些异步的问题,比如我们要在节点函数中发起一个 ajax
异步请求,异步请求返回的结果才能决定是否继续在职责链中 passRequest
。此时,让节点函数同步返回 nextSuccessor
已经没有意义了,所以要给 Chain
类再增加一个原型方法 Chain.prototype.next
,表示手动传递请求给职责链中的下一个节点:
Chain.prototype.next = function () { return this.successor && this.successor.passRequest.apply(this.successor, arguments); }
接下来,写一个异步职责链:
var fn1 = new Chain(function () { console.log(1); return 'nextSuccessor'; }); var fn2 = new Chain(function () { console.log(2); var self = this; setTimeout(function () { self.next(); }, 1000); }); var fn3 = new Chain(function () { console.log(3); }); fn1.setNextSuccessor(fn2).setNextSuccessor(fn3); fn1.passRequest();