Javascript 在node.js中为回调外部的变量赋值时会发生什么情况?

Javascript 在node.js中为回调外部的变量赋值时会发生什么情况?,javascript,node.js,callback,Javascript,Node.js,Callback,给定如下设置: var foo = -1; db.myCollection.findOne({_id : 1}, function(err, doc) { foo = doc.bar; //bar == 99 is true }); console.log(foo); 我发现控制台总是输出99。 为什么代码要等待?这不是异步的吗?不是所有回调都是异步的。这取决于将回调传递给的方法的机制 例如,数组上的sort方法接受它同步调用的回调排序在对您给它的回调进行所有调用之前不会返回:

给定如下设置:

var foo = -1;

db.myCollection.findOne({_id : 1}, function(err, doc) {
    foo = doc.bar; //bar == 99 is true

});

console.log(foo);
我发现控制台总是输出99。
为什么代码要等待?这不是异步的吗?

不是所有回调都是异步的。这取决于将回调传递给的方法的机制

例如,数组上的
sort
方法接受它同步调用的回调<代码>排序在对您给它的回调进行所有调用之前不会返回:

var a=[2,8,-1];
控制台日志(“之前”);
a、 排序(函数(x,y){
log(“用“、x、y”调用的回调);
返回x-y;
});

日志(“排序完成:”,a)
作为
db
使用什么?如果
findOne
是异步的,则该代码不会打印99。它将打印-1。所以如果你看到99,那么显然
findOne
是同步的。我不知道我们应该如何知道你正在运行的代码。如果行为是同步的,那么它是同步的。如果不是,那就不是。你查阅过文档吗?看看这个问题,你确实理解这个概念。如果没有说明
.findOne()
函数的实际功能,那么除了您提供的功能之外,我们还应该知道什么?也许这是另一个并不代表问题的例子。看起来确实是这样。毕竟,一个名为
.findOne()
的方法建议它对一个项执行搜索,这意味着如果回调是同步的,那么它就没有什么意义。但是AFAIK
mongodb
有一个
db.collection.findOne()
,它接受回调,并且是异步的……所以事实是,我是在字里行间读取的,没有任何结果。我们所要依赖的就是你们所呈现的遵守,同样,如果它是同步的,那么它就是同步的。如果不是,那么就不是,如果不确定,查阅文档将是第一步。无论哪种方式,如果你问了一个模糊的问题,没有太多的意义,你会受到挑战。