如何安全地一次写入多个文件?
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
来让您高枕无忧,但这很可能会减慢您的程序 并且 会阻塞您的进程,这可能是您不想要的根据您的用例进行操作。
我正在尝试在 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
来让您高枕无忧,但这很可能会减慢您的程序 并且 会阻塞您的进程,这可能是您不想要的根据您的用例进行操作。