Javascript 如何修改此变量?

Javascript 如何修改此变量?,javascript,mongodb,callback,Javascript,Mongodb,Callback,举个例子: var data = "foo"; db.collection('users').find({}).toArray(function(err,docs){ // a mongodb object data = 'bar'; }); console.log(data); // prints 'foo' 如何使其打印“bar”,即如何更改回调中数据的值?您必须习惯异步思考!该值仅在执行回调时更改 这样做: var data = "foo"; db.collection('users

举个例子:

var data = "foo";
db.collection('users').find({}).toArray(function(err,docs){ // a mongodb object
  data = 'bar';
});
console.log(data); // prints 'foo'

如何使其打印“bar”,即如何更改回调中
数据的值?

您必须习惯异步思考!该值仅在执行回调时更改

这样做:

var data = "foo";
db.collection('users').find({}).toArray(function(err,docs){ // a mongodb object
  data = 'bar';
  console.log(data);
});

你必须习惯于异步思考!该值仅在执行回调时更改

这样做:

var data = "foo";
db.collection('users').find({}).toArray(function(err,docs){ // a mongodb object
  data = 'bar';
  console.log(data);
});

正如其他人所暗示的,你的问题不是范围,而是执行顺序。您的console.log在将“bar”分配给值之前被调用。

正如其他人所暗示的,您的问题不是范围,而是执行顺序。您的console.log在将“bar”分配给值之前被调用。

这都是关于异步的……问自己两个问题,
1
它被调用了吗,
2
它什么时候被调用(即异步?),似乎您已经在回调中更改了值。函数是异步的,因为在函数执行之后不会有任何更改。这都是关于异步的…问自己两个问题,
1
它被调用了吗,
2
它何时被调用(即异步?),似乎您已经更改了回调中的值。函数是异步的,因为在函数执行之后不会有任何更改。