作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对 Node JS 着迷并开始深入研究,但是,来自 Java 背景,我对下面的示例感到困惑,在这些示例中,进行了一系列异步调用,这些调用依赖于共享变量来跟踪(所以以确定他们何时全部完成以执行另一项操作)。如果这个问题过于基础,我深表歉意,但我一直在搜索这个问题,但没有找到解释,我可能没有使用正确的术语。
如果你在 Java 中做了这样的事情,你需要使变量 n 同步以避免冲突,否则它的完整性可能会受到损害(这只是基于我读过的一些更复杂的例子的伪代码,抱歉,如果它不完美)
var n = 100
var funct_a = function(callback) {
return function() {
if (n == 0)
callback()
else
n--
}
}
for ( a in someArray) {
funct_a (function() {
//do something with variable a...
})
}
是不是它们只在一个“线程”中运行,因此它们实际上并没有在不同的 CPU 内核上运行并且实际上不能同时写入变量?对我来说,除了解决这些类型的冲突的一些核心 Node 服务器逻辑之外,这似乎是唯一合乎逻辑的解释。任何有助于阐明这一点的信息都值得赞赏。
最佳答案
node.js 是单线程的,但听起来您更关心 JavaScript 的闭包
以及函数作用域在 JavaScript 中的工作方式。如果您有一些其他代码可以访问 n
那么实际上,是的,您的 callback()
调用可能不会像您预期的那样运行。不过,从更高层次的 Angular 来看,您应该知道 CommonJS 模块会阻止您的 n
变量成为 global
,因此除非您在模块中公开它或弄乱它, n
不会被篡改。您可能已经知道这一点,但我建议您补充以下内容:
HTH迈克
关于javascript - Node.JS 不同的异步链如何毫无问题地改变共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152389/
我是一名优秀的程序员,十分优秀!