我目前有一段代码可以将文件下载到本地文件系统中。这很简单:
var downloadFile = function(request, file_name, cb) {
var final_path = file_name + '.pdf';
var file = fs.createWriteStream(final_path);
// Save temporary file to disk
var save_file = request.pipe(file);
save_file.on('finish', function () {
cb('success', final_path);
});
}
然而,有时,我会遇到一个错误(稍后在代码中),表明该文件尚未完全下载。当我自己手动打开文件时,它看起来很好。此外,当我们在网站上同时拥有相当多的用户时,错误似乎更频繁地发生。
所有这些都清楚地向我暗示了可能的竞争条件,但我不确定这可能发生在何处或如何发生。我对节点的理解是它是单线程的非阻塞I / O,这表明任何可能的罪魁祸首都在I / O部分:createWriteStream和后续管道(可能是'finish'回调处理程序)。也许他们被某种方式覆盖或被称为无序。但是怎么样?完成处理程序看起来像标准的承诺/回调。任何见解都将非常感谢!
-Edward
答案 0 :(得分:-1)
试试这个:
var downloadFile = function(request, file_name, cb) {
var final_path = file_name + '.pdf';
var file = fs.createWriteStream(final_path);
// Save temporary file to disk
request.pipe(file);
request.on('end', function () {
cb('success', final_path);
});
}