gpt4 book ai didi

node.js - For 循环中跳过的循环值

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:00 25 4
gpt4 key购买 nike

我的 Node.js 应用程序中有这个 for 循环:

for (var runNumber=1; runNumber<=numberOfRuns; runNumber++) {
runNumberQueue.place(function(){
versionRunningService.runMultiVersionJobs(
queue, jobId, sVersion, jobType, runNumber, currentConfig, allJobsConfig, appDir, function(){
runNumberQueue.next();
currentIterationCount++;
if (currentIterationCount === numberOfIterations) {
callback();
}
});
});
}

是不是结构有问题?似乎增加了 runNumber 然后用 runNumber 1 执行 runNumberQueue.place 函数,跳过 runNumberQueue.place 的执行对于 runNumber 2 并再次正确执行 runNumber 3。

我想知道这是否可能是一些异步问题,但认为 runNumberQueue.place 会在某个阶段与 runNumber 2 一起执行?

最佳答案

JavaScript 在循环内工作的方式是循环分数内定义的变量(例如,此处的 runNumber)绑定(bind)到相同的范围。因此,当您在循环内运行匿名函数时,它使用绑定(bind)到循环作用域的那些变量,而不是函数作用域。

这是 JS 循环中常见的情况。为了避免这种情况,您可以定义一个辅助变量来捕获循环索引变量的值,或者定义一个外部函数而不是匿名函数。

辅助变量:

for (var runNumber=1; runNumber<=numberOfRuns; runNumber++) {
var runNumberCopy = runNumber;
runNumberQueue.place(function(){
versionRunningService.runMultiVersionJobs(
queue, jobId, sVersion, jobType, runNumberCopy, currentConfig, allJobsConfig, appDir, function(){
runNumberQueue.next();
currentIterationCount++;
if (currentIterationCount === numberOfIterations) {
callback();
}
});
});
}

外部函数:

for (var runNumber=1; runNumber<=numberOfRuns; runNumber++) {
placeRunNumberQueue(runNumber);
}

// this function can be defined elsewhere and passed all the required arguments
function placeRunNumberQueue(runNumber) {
runNumberQueue.place(function(){
versionRunningService.runMultiVersionJobs(
queue, jobId, sVersion, jobType, runNumber, currentConfig, allJobsConfig, appDir, function(){
runNumberQueue.next();
currentIterationCount++;
if (currentIterationCount === numberOfIterations) {
callback();
}
});
});
}

another post更详细地讨论这个问题。

关于node.js - For 循环中跳过的循环值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517978/

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