尝试从URL下载并用node.js保存到文件中.这是我的问题

Trying to download from URL and save to file with node.js.. what is my issue?

本文关键字:存到文件 问题 我的 js node URL 下载      更新时间:2023-09-26

我想从URL下载特定的文件,但似乎只写出一个文件时遇到了问题。以下是我的代码:

var filenames=["a.txt", "b.txt", "c.txt"];
for(var i in filenames) {
  var url = 'http://myhomepage/'+filenames[i];
  restler.get(url, {
    }).on('complete', function (data) {
      fs.writeFile('./'filenames[i], data, function(err, data) {
      })
    });      
  }

似乎唯一被写出来的文件是"c.txt",而不是其他文件。问题是什么?如何解决?

这是因为restler.get是异步的,在写入第一个文件时,for循环位于最后一个元素上。你可以通过使用forEach并为你迭代的每个elem创建一个单独的作用域来解决这个问题:

var filenames=["a.txt", "b.txt", "c.txt"];
filenames.forEach(function(filename) {
  var url = 'http://myhomepage/'+filename;
  restler.get(url, {
    }).on('complete', function (data) {
      fs.writeFile('./' + filename, data, function(err, data) {
      })
    });      
  }
} );

或者,如果你想减少实现的更改,你可以创建一个包装函数来创建一个单独的作用域:

var filenames=["a.txt", "b.txt", "c.txt"];
for(var i in filenames) {
  (function(i) {
  var url = 'http://myhomepage/'+filenames[i];
  restler.get(url, {
    }).on('complete', function (data) {
      fs.writeFile('./'filenames[i], data, function(err, data) {
      })
    });  
  }(i));    
  }