当在node.js中给回调之外的变量赋值时会发生什么?
What happens when when assigning values to a variable outside a callback in node.js?
给定如下设置:
var foo = -1;
db.myCollection.findOne({_id : 1}, function(err, doc) {
foo = doc.bar; //bar == 99 is true
});
console.log(foo);
我发现控制台总是输出99。为什么代码要等待?这不是异步的吗?
不是所有的回调都是异步的。这取决于你要传递回调给的方法的机制。
例如,数组上的sort
方法接受一个同步调用的回调;sort
不会返回,直到它对你给它的回调进行了所有的调用:
var a = [2, 8, -1];
console.log("before");
a.sort(function(x, y) {
console.log("callback called with", x, y);
return x- y;
});
console.log("sort complete:", a);
输出:<>之前之前回调呼叫28用8 -1调用回调用2 -1调用回调排序完成:[- 1,2,8]之前
(注意"callback called with"的确切顺序和行数取决于浏览器的JavaScript引擎)
相反,NodeJS API中的fs.open
调用异步调用其回调;它在启动打开文件的进程后返回,但不等待该进程完成,然后在该进程稍后完成时调用回调。我不能提供fs.open
的现场示例,但是setTimeout
也异步调用它的回调:
console.log("before");
setTimeout(function() {
console.log("in the callback");
}, 0);
console.log("after");
输出:<>之前之前后在回调中
相关文章:
- 未设置变量的赋值| jQuery的作用是什么
- 什么's是编写内联赋值和检查PHP'逻辑'但是使用JavaScript
- 什么's具有fn's赋值运算符两侧的名称(一个对象fn)
- JavaScript - 这些值赋值(使用 |= 作为运算符)是什么意思
- 赋值表达式的标准格式是什么
- 使用Javascript,变量赋值上下文中的表达式与上下文外的表达式有什么区别
- 复合let/const赋值是什么意思
- 逗号在JavaScript中的赋值语句中起什么作用
- 给for循环的结束点赋值的优缺点是什么?
- 声明没有赋值的变量有什么意义?
- 当在node.js中给回调之外的变量赋值时会发生什么?
- JavaScript中赋值操作返回赋值的意图/想法是什么?
- 窗户怎么样?onload工作吗?在它上面调用函数和给它赋值有什么区别?
- 在JavaScript中给变量赋值时,使用命名函数的目的是什么?
- 将变量赋值给全局作用域有什么危险或好处吗?
- 将构造函数赋值给某物是什么意思?
- 将生命周期的公共成员赋值给变量与返回对象之间的区别是什么?
- 赋值语句周围的圆括号是做什么的?
- 使用Object.create()和使用赋值操作符有什么区别?
- 赋值给exports和module之间的区别是什么?