Node.js http.get in 循环仅获取最后一项



我正在循环一组试图获取其HTML的URL,但它仅适用于列表中的最后一个。 正如预期的那样,"尚未写入"控制台.log 会针对 urls 数组中的所有内容触发,但之后的 console.logs 只会对最后一个触发。 它们都是有效的 URL 和"res.on('error'....."不返回任何内容。

任何帮助将不胜感激!

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);
        });
    });
}

在第 console.log(urlPrefix+getURL); 行中,值将始终用于最后一个 url,因为当调用回调时,这些变量的值将从上次分配它们的时间开始,这是循环中的最后一次迭代。

而是在单独的函数中发出请求,例如

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)调用这个函数,然后检查问题是否仍然存在

相关内容

  • 没有找到相关文章

最新更新