nodejs异步函数参数在快速调用中的持久性

nodejs async function parameters durability in rapid calls

本文关键字:调用 持久性 异步 函数 参数 nodejs      更新时间:2023-09-26

对不起,这个话题可能会让人困惑,因为我不知道该怎么说。

考虑这样一种情况:我有一个只有一个参数的异步函数。数组。

我在函数中使用了这个参数。我担心多次调用函数可能会重写我之前发送给函数的数组。这会发生吗?

假设此代码://这是一个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];
    .
    .
    .
}