gpt4 book ai didi

node.js - 多个 bash 脚本无法在生成的子进程中异步运行

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:11 24 4
gpt4 key购买 nike

这对于异步单次调用来说运行良好:

"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++)

关于node.js - 多个 bash 脚本无法在生成的子进程中异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299728/

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