【发布时间】:2023-03-20 20:05:01
【问题描述】:
我一直在处理一些others,还有 this 的循环数组以从各种来源获取数据的 http.get 数据。我知道 nodeJS 正在异步工作,这允许文件被写为空或不完整的数据,但我似乎无法超越这一点。
问题:已调用,已构建文件但文件始终为空
目标:循环遍历一个数组以从站点数据本地创建文件。这是我目前得到的:
var file_url = 'http://js.arcgis.com/3.8amd/js/esri/',
DOWNLOAD_DIR = './esri/',
esriAMD = [ '_coremap.js', 'arcgis/csv.js'];
function readFile(callback) {
if (esriAMD.length > 0) {
var setFile = esriAMD.shift(),
file_name = url.parse(file_url).pathname.split('/').pop(),
trial = setFile.split('/').pop(),
file = fs.createWriteStream(DOWNLOAD_DIR + trial);
http.get(file_url + esriAMD, function(res) {
res.on('data', function(data) {
file.write(data);
console.log(setFile + ' has been written successfully');
});
res.on('end', function(){
console.log(setFile + ' written, moving on');
console.log(esriAMD.length);
readFile(callback);
});
//readFile(callback);
});
} else {
callback();
}
}
readFile(function() {
console.log("reading finishes");
});
任何见解都会有帮助。
谢谢,
【问题讨论】:
-
尝试使用更简单的模块,例如
request,如果您可以将文件直接通过管道传输到流。 -
您当前的解决方案有哪些问题?
-
这个“http.get(file_url + esriAMD...”应该是“http.get(file_url + file_name...”,对吗?另外,我会在回调中为http.get() 而不是在外面。这对你来说应该没关系,因为在 res.on('end') 之前你不会再次调用 readFile() 但从逻辑上讲,它在里面会更有意义。
-
@Phoenix 我尝试了 http.request 并收到“套接字挂断”错误,有什么想法吗?
-
@HectorCorrea 感谢您为我指明了正确的方向,我传入了错误的变量。我应该传入'setFile'
标签: arrays node.js loops http-get streamwriter