我循环尝试获取HTML的一组网址,但它只适用于列表中的最后一个。 "不写作"如预期的那样,console.log会触发urls数组中的所有内容,但是之后的console.logs只触发最后一个。它们都是有效的网址和" res.on('错误' ....."什么都不返回。
非常感谢任何帮助!
for (var z in urls) {
var getURL = urls[z];
var copyURL = 'copies/'+getURL;
if (copyURL.indexOf('/') >= 0) {
var copyURLArr = copyURL.split('/');
} else {
var copyURLArr = [copyURL];
}
var copyFile = copyURLArr.pop();
var runningDirs = '';
for (var i in copyURLArr) {
if (runningDirs.length > 0) runningDirs += '/';
runningDirs += copyURLArr[i];
if (!require('fs').existsSync(runningDirs)) {
exec('mkdir '+runningDirs);
}
}
console.log('NOT WRITING YET: '+urlPrefix+getURL);
require('http').get(urlPrefix+getURL, function(res) {
console.log(urlPrefix+getURL);
res.on('data', function(data) {
console.log(copyURL);
require('fs').createWriteStream(copyURL, {flags:'a+'}).write(data);
});
});
}
答案 0 :(得分:2)
在行console.log(urlPrefix+getURL);
中,值始终为最后一个url,因为在调用回调时,这些变量的值将来自它们最后一次分配,这是循环中的最后一次迭代。 / p>
而是在一个单独的函数中发出请求,如
function doRequest(url, copyURL) {
require('http').get(url, function(res) {
console.log(url);
res.on('data', function(data) {
console.log(copyURL);
require('fs').createWriteStream(copyURL, {flags:'a+'}).write(data);
});
});
}
然后使用doRequest(urlPrefix+getURL, copyURL)
调用此函数,然后检查问题是否仍然存在