多个 bash 脚本不能 运行 在生成的子进程中异步

Multiple bash scripts can't run asynchronously within spawned child processes

这 运行 适合单次异步调用:

"use strict";

function bashRun(commandList,stdoutCallback,completedCallback)
{
     const proc=require("child_process");
     const p=proc.spawn("bash");
     p.stdout.on("data",function(data){          
        stdoutCallback(output);  
     });
     p.on("exit",function(){
          completedCallback();
     });
     p.stderr.on("data",function(err){
           process.stderr.write("Error: "+err.toString("utf8"));
     });
     commandList.forEach(i=>{
         p.stdin.write(i+"\n");
     });
     p.stdin.end();
}

module.exports.bashRun = bashRun;

但是当在 for 循环中时,它不会。它只输出最新元素(进程)的标准输出信息:

for(var i=0;i<20;i++)
{
   var iLocal =i;
   bashRun(myList,function(myStdout){ /* only result for iLocal=19 !*/},function(){});
}

我需要这个异步(并且还与多个子进程同时)给出每个 stdoutCallback 函数的输出以在其中进行一些处理。虽然 stdout 不起作用,但 completedCallback 至少被调用了 20 次,因此在某个时间片中仍然必须有 20 个进程,但不确定它们是否存在于同一时间片中。

我做错了什么,派生的子进程无法将它们的输出提供给 nodejs? (为什么只有最后一个(i=19)可以?)

我试图用 fork 交换 spawn 但现在它给出错误

     p.stdout.on("data",function(data){
              ^

TypeError: Cannot read property 'on' of null

如何使用其他东西来保留上述模块的相同功能?

范围值 i 似乎有问题,请尝试将循环更改为使用 let

例如:for(let i=0;i<20;i++)