2015-01-16 3 views
0

У меня есть проблема, когда Распределите данные Postgres это мой сниппета:Как присвоить данные свойства класса после получения данных от Postgres

var database = function() { 
    client.connect(function(err) { 
     if(err) { 
      return console.error('could not connect to postgres', err); 
     } 
    }); 
}; 

database.prototype.getData = function() { 
    this.data = []; 
    this.queryStr = 'SELECT * FROM "agents"'; 
    this.query = client.query(this.queryStr); 
    var data = []; 
    this.query.on('row', function(row) { 
     data.push(row); 
     //console.log(data); // get data successfully 
    }); 

    //could not assign data 
    console.log(data); // but when go out above function, data become no value 
    this.data = data; // and then I can not assign it for property of class (like this.data) 
}; 

Может кто-нибудь помочь мне разрешить this.sorry моему английскому. Tks много.

ответ

1

Ваши данные назначаются внутри обратного вызова, который выполняется после запуска вашего метода.

Обычно вы выполняете функцию обратного вызова, когда выполнение вашей функции завершено.

Я не квалифицирован в использовании библиотеки Postgre, но вот псевдо-код:

database.prototype.getData = function(success) { 
    this.data = []; 
    this.queryStr = 'SELECT * FROM "agents"'; 
    this.query = client.query(this.queryStr); 
    var self = this; 
    var data = []; 
    this.query.on('row', function(row) { 
     data.push(row); 
     //console.log(data); // get data successfully 
    }); 
    this.query.on('end', function() { //when the query executes succesfully 
     self.data = data; 
     success(); //call success callback or perform other actions 
    }); 
}; 
+0

спасибо за Ваш ответ, но он по-прежнему не имеет значения, когда за пределами функции. фактически это .on ('конец', функция). –

+0

У него не будет значения вне его в любом случае –

+0

Но я хочу, чтобы он присваивал свойству класса, поэтому я могу использовать эти данные в этом объекте. –

Смежные вопросы