2014-09-03 87 views
1

正在执行mongo数据库查找,打算将结果保存在作用域变量中。回调中的Javascript变量范围?

var users = ['kat']; 

collection.find({key: key}, function(err, doc) { 
    if (doc) { 
     var firstEntry = doc[0]; 
     users = firstEntry.users; 
     users.push('jack'); 
    } else { 
     console.log("DB ERROR: cannot find: " + key); 
    } 
}); 

console.log(users); // Why does this return only Kat, and Jack is not appended? 

谢谢!

+0

大声笑..重新回到功能回调问题!哈哈.. @elclanrs真的..这是每天重复。 – 2014-09-03 05:50:19

回答

1

你无法预测回调函数何时执行..这就是为什么用户的数组没有正确更新..当回调触发数组将更新自己,但直到它,数组将会是相同的。回调函数只会在find事件完成时执行,但这并不意味着它会阻止代码的其余部分执行。回调异步触发。希望有所帮助!至少提示正确的方向:)

处理回调中的成功逻辑(console.log)..

+0

哇!谢谢你!我认为这与当地的一些范围界定问题有关。 – kaid 2014-09-03 05:58:51

+0

不用担心!快乐编码:) – 2014-09-03 06:02:44