我有一个子进程,因为我正在将流通过管道传输到父进程。
在child.js中
let stream = readdirp(pathname);
stream.pipe.pipe(process.stdout);
在parent.js中
let file = child => {
let estream = es.map((data, next) => {
_this.s3MultiUpload(JSON.parse(data), data, next);
//i uploding this files to s3.
});
child.on("end", (code, signal) => {
console.log("stream ended"); // `here is my problem`
child.kill();
});
child.on("exit", (code, signal) => {
console.log(code);
console.log(signal);
child.kill();
});
return estream;
};
child = fork(filePath, { silent: true });
child.stdout.pipe(this.file(child));
我的问题是在我上传所有文件到s3流结束。我学习了反压,但我不明白如何在这里实现?
我想我需要添加回调或其他东西来处理标准输出管道。我不知道
你能帮帮我吗
1条答案
按热度按时间lpwwtiir1#
这种方法复杂得不必要。由于IO操作不受CPU限制,我们最好使用Promises以及JavaScript的
async
/await
和*
语法来执行并行文件上传。构建我们自己的同步机制是复杂的,并且有许多重叠的语言和库级别的概念出现1。基于 readdirp 文档,但注意到我对特定的上传API并不熟悉,我建议沿着以下代码
1.反压是在将响应式扩展库移植到Java中实现它的JVM的过程中产生的这些概念之一。只是为了论证(理智?)考虑what Erik Meijer says regarding backpressure。