【问题标题】:Node.js - Better way to manage javascript scopes between callbacks?Node.js - 在回调之间管理 javascript 范围的更好方法?
【发布时间】:2013-03-20 00:57:28
【问题描述】:

我正在使用 Node.JS,并且有两个对象可以通过回调在它们之间移动。我想出了一个解决方案来维护对正确对象的范围引用。我正在尝试找出是否有更好的方法来做到这一点,或者这是否是一种好的做法。

function Worker () {}

Worker.prototype.receiveJob = function(callback, bossReference) {
  this.doJob(callback, bossReference);
};

Worker.prototype.doJob = function(callback, bossReference) {
  callback.call(bossReference);
  // callback(); // this will not work
};

function Boss () {
  this.worker = new Worker();
}

Boss.prototype.delegateJob = function() {
  this.worker.receiveJob(this.whenJobCompleted, this);
};

Boss.prototype.whenJobCompleted = function() {
  this.sayGoodJob();
};

Boss.prototype.sayGoodJob = function() {
  console.log('Good job');
};

var boss = new Boss();
boss.delegateJob();

【问题讨论】:

    标签: javascript node.js oop events callback


    【解决方案1】:

    使用Function.prototype.bind()

    function Worker () {}
    
    Worker.prototype.receiveJob = function(callback) {
      this.doJob(callback);
    };
    
    Worker.prototype.doJob = function(callback) {
      callback()
    };
    
    function Boss () {
      this.worker = new Worker();
    }
    
    Boss.prototype.delegateJob = function() {
      this.worker.receiveJob(this.whenJobCompleted.bind(this));
    };
    
    Boss.prototype.whenJobCompleted = function() {
      this.sayGoodJob();
    };
    
    Boss.prototype.sayGoodJob = function() {
      console.log('Good job');
    };
    
    var boss = new Boss();
    boss.delegateJob();
    

    除非你在你的函数中需要它,否则你将不再需要那些愚蠢的bossReferences

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2013-08-17
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多