2013-05-09 4 views
2

Я считаю, что это проблема с ее асинхронизмом, но я не знаю этого решения.NodeJS не может получить доступ к переменной внутри обратного вызова

PagesController.buy = function() { 

    var table=""; 
    Selling.find({}, function(err, res) { 
    for (var i in res) { 
     console.log(res[i].addr); 
     table = table + "res[i].addr"; 
    } 
    }); 
    this.table = table; 
    console.log(table); 
    this.render(); 
} 

Моя проблема заключается в том, что this.table=table возвращается неопределенным, если я пытаюсь доступ к нему за пределами функции, и я не могу понять, как отобразить таблицу на стр.

+0

Как вы пытаетесь получить доступ к «this.table» вне функции? –

+0

Извините, я имел в виду, что переменная «таблица» задана внутри функции (err, res) {}, и когда я пытаюсь назначить ее this.table, переменная «table» пуста. – h00j

ответ

5

Проблема заключается в том, что Selling.find является асинхронным и, вероятно, не завершен к моменту выполнения таблицы this.table =. Попробуйте что-то вроде следующего.

PagesController.buy = function() { 
    var that = this; 
    Selling.find({}, function(err, res) { 
    var table = ''; 
    for (var i in res) { 
     console.log(res[i].addr); 
     table = table + res[i].addr; 
    } 

    that.table = table; 
    console.log(table); 
    that.render(); 
    }); 
} 

Это гарантирует, что таблица не будет использоваться до тех пор, пока результаты не будут получены, а таблица заполнена.

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