Node.JS不同的asynchronous链怎样才能让共享variables没有问题?

我着迷于Node JS,并且已经开始潜入,但是,来自Java背景,我被下面的例子搞混了,在这个例子中,一个asynchronous调用链依靠一个共享variables来跟踪(这样来确定何时他们已经完成了另一个行动)。 我很抱歉,如果这个问题是过分基本的,但是我一直在寻找这个,并没有find解释,我可能不会使用正确的条款。

如果你在Java中做了这样的事情,你需要使variablesn同步,以避免碰撞,否则它的完整性可能会受到损害(这只是基于pseduo代码,基于一些更复杂的例子,如果它不是完美的,

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核上运行,而是不能实际同时写入该variables? 对于我来说,这似乎是唯一合乎逻辑的解释,可以解决这些types的冲突的一些核心节点服务器逻辑。 任何信息,以表明赞赏。

node.js 单线程的,但是听起来像你更关心JavaScript的closures以及函数作用域如何在JavaScript中工作。 如果你有其他的代码可以访问n那么你的callback()调用就不会像你期望的那样运行。 从更高层面来看,你应该知道CommonJS模块将会阻止你的nvariables成为一个globalvariables,所以除非你在模块内部暴露或弄乱它, n不会被篡改。 您可能已经了解了这一点,但是我build议您阅读以下内容:

  • JavaScript模块化模式; 特别是CommonJS for node.js,还要学习AMD
  • JavaScript函数范围
  • JavaScriptclosures

HTH迈克

在node.js中,除I / O操作之外,所有代码都是同步工作的。 它与Java完全不同。 尝试阅读这篇文章,它可能会帮助你下注。