gpt4 book ai didi

javascript - Node.JS 不同的异步链如何毫无问题地改变共享变量?

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:29 25 4
gpt4 key购买 nike

我对 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 不会被篡改。您可能已经知道这一点,但我建议您补充以下内容:

  • JavaScript 模块化模式;特别是 node.js 的 CommonJS,还要学习 AMD
  • JavaScript 函数作用域
  • JavaScript 闭包

HTH迈克

关于javascript - Node.JS 不同的异步链如何毫无问题地改变共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com