外部可变回调为空

时间:2016-12-12 14:57:32

标签: node.js callback return nosql

我是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

非常感谢你:)

2 个答案:

答案 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变量。

这有帮助吗?

相关问题