Как прослушивать переменное изменение в Javascript?

Я возился с использованием Node.js и CouchDB. То, что я хочу сделать, это сделать вызов db внутри объекта. Вот сценарий, который я сейчас рассматриваю:

var foo = new function(){
   this.bar = null;

   var bar;

   calltoDb( ... , function(){

      // what i want to do: 
      // this.bar = dbResponse.bar;

      bar = dbResponse.bar;      

   });

   this.bar = bar;

}

Проблема со всем этим заключается в том, что обратный вызов CouchDB является асинхронным, а "this.bar" теперь находится в области функции обратного вызова, а не класса. Есть ли у кого-нибудь идеи для достижения того, что я хочу? Я бы предпочел не иметь объект-обработчик, который должен делать вызовы db для объектов, но прямо сейчас я очень сильно обеспокоен тем, что он является асинхронным.

Ответ 1

Просто держите ссылку на this вокруг:

function Foo() {
   var that = this; // get a reference to the current 'this'
   this.bar = null;

   calltoDb( ... , function(){
      that.bar = dbResponse.bar;
      // closure ftw, 'that' still points to the old 'this'
      // even though the function gets called in a different context than 'Foo'
      // 'that' is still in the scope and can therefore be used
   });
};

// this is the correct way to use the new keyword
var myFoo = new Foo(); // create a new instance of 'Foo' and bind it to 'myFoo'

Ответ 2

Сохраните ссылку на this, например:

var foo = this;
calltoDb( ... , function(){

  // what i want to do: 
  // this.bar = dbResponse.bar;

  foo.bar = dbResponse.bar;      

});