我是NodeJS初学者,实际上我尝试使用NoSQL数据库来构建简单的登录。摘要式身份验证。我还创建了一个名为" users"我的应用程序已加载。
现在,当我尝试在回调函数中调用数据结果时,我得到了正确的数据。在同一个回调中,我将返回的数据分配给变量 records 。当我在外面调用变量时,我会得到结果 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
非常感谢你:)
答案 0 :(得分:1)
由于您在回调中调用console.log(users),因此该值会正确反映。这是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
答案 1 :(得分:0)
对我来说似乎是一个时间问题。在调用(异步)回调函数之前调用外部作用域中的console.log(records)
时,records
包含最初分配的值(records = null
)。
只有在调用异步回调后,才会设置records
变量。
这有帮助吗?