2016-12-12 3 views
0

Я новичок NodeJS, и на самом деле я пытаюсь работать с NoSQL Database для создания простого входа через. Аутентификация дайджеста. Я также создал модуль под названием «пользователи», который загружается в мое приложение.Переменный внешний обратный вызов пуст

Теперь, когда я пытаюсь вызвать результаты данных внутри функции обратного вызова, я получаю свои правильные данные. В том же обратном вызове я присваиваю возвращаемые данные переменной записей. Когда я вызываю переменную снаружи, я получу результат null - где ошибка?

var dbdriver = require('nosql'), 
dbfile = dbdriver.load("./db.nosql"), 
records = null 

dbfile.top(1000).callback(function(err, response) { 
    (function(users) { 
     records = users 
     console.log(users) // Here i get the wanted result 
    })(response) 
}) 

console.log(records) // Here the result is empty 

большое спасибо :)

ответ

1

Поскольку вы звоните console.log (пользователи) внутри обратного вызова, значение правильно отражается. И это поведение асинхронных вызовов в javascript. Таким образом, последняя строка console.log (записи), вероятно, будет запущена сначала до выполнения обратного вызова, и поэтому записи до этого момента не имеют никакого значения. Поэтому я предлагаю вам сделать функцию, которая что-то делает для пользователей и вызывает ее внутри обратного вызова.

var dbdriver = require('nosql'), 
dbfile = dbdriver.load("./db.nosql"), 
records = null 

dbfile.top(1000).callback(function(err, response) { 
    (function(users) { 
     //records = users 
     //console.log(users) // Here i get the wanted result 
     doSomethingToUsers(users); 
    })(response) 
}) 

function doSomethingToUsers(users) { 
// do something to users 
} 

//console.log(records) // Here the result is empty 
0

Похож на вопрос времени. Когда console.log(records) в внешний вид вызывается до того, как была вызвана функция обратного вызова (async), records содержит точно значение, которое было первоначально назначено (records = null).

Только после вызова асинхронного обратного вызова будет установлена ​​переменная records.

Помогает ли это?

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