相关疑难解决方法(0)

fs.createWriteStream不会立即创建文件?

从http函数下载了一个简单的下载(为简化省略了错误处理):

function download(url, tempFilepath, filepath, callback) {
    var tempFile = fs.createWriteStream(tempFilepath);
    http.request(url, function(res) {
        res.on('data', function(chunk) {
            tempFile.write(chunk);
        }).on('end', function() {
            tempFile.end();
            fs.renameSync(tempFile.path, filepath);
            return callback(filepath);
        })
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,由于我download()异步调用了几十次,它很少报告fs.renameSync抱怨它无法找到文件的错误tempFile.path.

Error: ENOENT, no such file or directory 'xxx'
Run Code Online (Sandbox Code Playgroud)

我使用相同的网址列表来测试它,它失败了大约30%的时间.逐个下载时,网址列表相同.

测试了一些,我发现了以下代码

fs.createWriteStream('anypath');
console.log(fs.exist('anypath'));
console.log(fs.exist('anypath'));
console.log(fs.exist('anypath'));
Run Code Online (Sandbox Code Playgroud)

并不总是打印true,但有时打印第一个答案false.

我怀疑太多异步fs.createWriteStream调用无法保证文件创建.这是真的?有没有什么方法可以保证文件的创建?

node.js

34
推荐指数
2
解决办法
7万
查看次数

标签 统计

node.js ×1