node.js - Node 进程在 writeStream 结束前退出

标签 node.js http pipe

我有一个 nodejs 程序从服务器下载一堆文件。问题是进程在文件实际下载之前就退出了,所以我得到了一个损坏的文件。

for(var i = 0; i < items.length; i++){
    var file = fs.createWriteStream(items[i].filename);
    var request = http.get(items[i].url, function (response) {
      console.log('got:', i);
      response.pipe(file);
    });
    request.on('end', function () {
      console.log('done with ' + filePath);
    });
}

但是当最后一个请求收到响应时,进程退出。我从来没有得到“完成”日志。

有人有想法吗?

谢谢!

最佳答案

您没有正确处理异步性。

尝试使用名为 async 的库并像这样使用它

async.eachSeries(items, function (item, callback) {
   var file = fs.createWriteStream(item.filename);
   var request = http.get(item.url, function (response) {
       response.pipe(file);
   });
   request.on('end', function () {
       console.log('done with ' + filePath);
       callback(null);
   });
}, function (err) {
    console.log('All done!');
});

关于node.js - Node 进程在 writeStream 结束前退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497063/

相关文章:

javascript - 这两行代码有什么区别?

javascript - 使用适用于 Node.js 的 AWS 开发工具包将项目放在 DynamoDB 表中

Java 从 anapioficeandfire 读取 URL 返回 403

javascript - 跨浏览器平台独立http图片上传库(mac/linux/windows/ipad)

http - Http Session 和 Http Stateless 矛盾吗?

bash - 当文件系统跟不上 bash 重定向的输出时会发生什么?

java - 为什么我的 Java 代码无法正确执行 bash 命令?

node.js - SonarQube 分析未显示代码覆盖率

node.js - MongoDB:如何插入子文档?

linux - 从管道查找结果中检索最后修改的文件