【发布时间】:2021-07-14 15:15:12
【问题描述】:
我目前将子进程的标准输出通过管道传输到(Express)response 对象,如下所示:
try{
let proc = spawn(exe, args);
proc.stdout.pipe(response);
let exitCode = await ending.completion(proc);
}
finally {
// my own clean up goes here (e.g. releasing locks)
}
ending.completion 定义为
async function(process){
return new Promise(function(resolve,reject){
let done = false;
process.on('exit', (code, signal)=>{
if(!done){
done = true;
if(code !== null){
resolve(code);
} else {
reject(signal);
}
}
});
process.on('error', (err)=>{
if(!done){
done = true;
reject(err);
}
});
});
};
这通常工作正常,除了 proc 在完成/返回之前在内部做了很多等待(在下载/传输时)。我更愿意让它将其输出转储到缓冲区中,然后随着下载的进行,该缓冲区会流入响应对象。如何引入这样的缓冲区?
(第二个(我认为是相关的)问题是,如果客户端中止下载,proc 永远不会完成,而是一直在其标准输出上等待。)
【问题讨论】:
标签: node.js express es6-promise node-streams