.
3ss.cn

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();
赞(0)
未经允许不得转载:互联学术 » JavaScript 设计模式之异步的职责链

评论 抢沙发