nodejs异步函数参数在快速调用中的持久性
nodejs async function parameters durability in rapid calls
对不起,这个话题可能会让人困惑,因为我不知道该怎么说。
考虑这样一种情况:我有一个只有一个参数的异步函数。数组。
我在函数中使用了这个参数。我担心多次调用函数可能会重写我之前发送给函数的数组。这会发生吗?
假设此代码://这是一个IPC函数,将由另一个进程调用。
responder.on('message', function(request) {
resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}
恐怕resp[]会在第一次调用完成之前被覆盖,这会导致第一次调用代码执行出现问题。
考虑以下示例:
function doStuff() {
var temp = 0;
function modifyTemp(temp) {
temp = 5;
}
modifyTemp(temp);
//the value of temp is still 0
function modifyTemp2() {
temp = 10;
}
modifyTemp2();
//temp now equals 10
}
doStuff();
请注意,temp在"doStuff()"的闭包范围内。因此,此范围内对temp的任何引用都将使用此引用,除非有一个引用具有优先级,如modifyTemp(temp)声明的示例。在这种情况下,创建一个临时变量的临时副本并将其存储到"temp"中,该副本仅在该函数的范围内进行修改,并且在闭包中定义的临时保持不变。因此,你的问题的答案是,这取决于你声明的resp可变范围的级别。从你可能的写作方式来看,我认为你对正在发生的事情的结论实际上是一个令人担忧的问题。
以下修改(在注释/未注释行中提供)可能会提供法律上不同的行为,这取决于程序的其余部分如何运行,以及您有多少异步内容。请注意,未注释的实现重新定义了变量,这样我们就不必担心连续运行或其他函数会干扰它的值。
responder.on('message', function(request) {
//resp = msgpack.unpack(request);
var resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- Javascript/jQuery中的并行Ajax调用
- nodejs异步函数参数在快速调用中的持久性