我正在尝试通过节点画布循环写入 100 多个 png 文件。仅生成 40 个文件,然后该过程完成。
我尝试通过 createPNGStream() 创建一个 png 流,并将结果通过管道传输到由 fs.createWriteStream() 创建的写入流。
写函数:
function writeFile(row, col) {
// canvas code ...
const stream = canvas.createPNGStream();
let path = __dirname + '/imgs/heatmapRow' + row + "Col" + col + '.png';
const out = fs.createWriteStream(path);
stream.pipe(out);
out.on('finish', () => console.log('The PNG file was created.'))
}
调用函数:
function generateImages(){
var numRows = 20;
var numCols = 5;
for(let row = 0; row < numRows; ++row) {
for (let col = 0; col < numCols; ++col) {
writeFile(row, col);
}
}
}
循环运行并完成,最后我一次得到一堆以下行:
PNG文件已创建。PNG文件已创建。PNG文件已创建。PNG文件已创建。
我认为在每个循环中都会创建一个 writeStream 并且是异步的。该过程正在终止,因为我只能打开这么多流。
如何编写所有文件并异步执行以加快处理时间?(我不喜欢同步写入文件)我需要将每个 writeFile 添加到队列中吗?如何确定打开的流的数量限制以及如何管理它们?