如何安全地一次写入多个文件?

How to safely write multiple files at once?

我正在尝试在 node.js 中一次写入来自 URL 的多个音频文件。

这是一个似乎有效的代码,但我不确定这是否是一种安全的方法,因为 for 循环中有许多异步回调。

var fs = require('fs');
var http = require('http');

function writeAudioFilesFromUrls(urls) {
  var len = urls.length;
  var files = Array(len).fill();
  var count = 0;
  for (let i = 0; i < len; i++) {
    files[i] = fs.createWriteStream(`output/audio${i}.mp3`);
    http.get(urls[i], function (res) {
      res.pipe(files[i]);
      files[i].on('finish', function () {
        files[i].close(function () {
          if (++count == len) {
            console.log("All files are sucessfully written!");
          }
        });
      });
    }); 
  }
}
writeAudioFilesFromUrls(["http://s5.qhres.com/static/465f1f953f1e6ff2.mp3", "http://s5.qhres.com/static/465f1f953f1e6ff2.mp3"]);

使用此代码安全吗?如果没有,我该如何解决?

已添加:或者是否可以让函数同步工作?

这是安全的,当您尝试将多个流(或其他)写入同一个文件时,您通常会担心。

您可以使用 fs.writeFileSync 来让您高枕无忧,但这很可能会减慢您的程序 并且 会阻塞您的进程,这可能是您不想要的根据您的用例进行操作。