Как прослушать изменение переменной в Javascript? - PullRequest
11 голосов
/ 03 сентября 2010

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

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 для объектов, но сейчас я действительно озадачен проблемой его асинхронности.

Ответы [ 2 ]

6 голосов
/ 03 сентября 2010

Просто сохраните ссылку на 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 голосов
/ 03 сентября 2010

Сохранить ссылку на this, вот так:

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

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

  foo.bar = dbResponse.bar;      

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...