【发布时间】:2013-07-22 22:18:03
【问题描述】:
抱歉,这个话题可能会让人困惑,因为我不知道该怎么说。
考虑一种情况,我有一个带有一个参数的异步函数。一个数组。
我在函数内部使用了这个参数。恐怕多次调用函数可能会重写我之前发送给函数的数组。会不会发生?
假设以下代码: //这是一个IPC函数,将被另一个进程调用。
responder.on('message', function(request) {
resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}
恐怕 resp[] 会在第一次调用完成之前被覆盖,这会导致第一次调用代码执行出现问题。
【问题讨论】:
-
与您的 responder.on 函数的范围相比,您能否扩展声明“resp”变量的位置。这对于回答这个问题非常重要。现在看来您已经创建了一个全局变量,并为其分配了 msgpack.unpack(request) 的值。
-
如果 "resp" 在处理函数之外声明,那么它将被在该上下文中创建的所有此类处理程序(以及所有调用)共享。但是,还应该注意的是,任何时候只有一次处理程序调用处于活动状态。
-
@Pointy:“任何时候只有一个处理程序调用处于活动状态。” Node 没有提供这样的保证,而这正是我认为 OP 关心的问题。
-
@ChrisCM 好吧,如果是这样的话(我觉得这有点令人惊讶,因为这意味着 JavaScript 没有提供许多潜在的同步问题),那么是的,这是一个问题。
-
@ChrisCM 实际上我发现很难找到任何声称节点事件循环可以被另一个事件抢占的东西。
标签: javascript node.js zeromq