Ниже приведено Node.js Сценарий. Он загружает изображения, содержащиеся в div. Петля отлично работает для 9.86%, которая до id = 36. Когда id> 36, он выходит из цикла. Я использую версию узла 0.12. Контур должен запустить 365 раз перед его завершением. Я использую метод рекурсивный обратный вызов.Node.js Рекурсивная петля не работает
Код:
//Required modules
var fs = require('fs'),
cheerio = require('cheerio'),
request = require('request');
//Default Variables
var baseURI = 'http://www.website/';
var year = 2013;
var id = 1;
var savePath = process.argv[2];
//Download Function
var download = function(uri, filename, callback){
request({ uri: uri }, function(err, res, body){
var $ = cheerio.load(body);
var imgDiv = $('#img-wallpaper').children()['0'];
if(err)
console.err(err);
if(typeof imgDiv !== 'undefined') {
request(imgDiv.attribs.src).pipe(fs.createWriteStream(filename)).on('close', callback);}
});
};
//Main Function
console.log("Downloading . . .");
// Loop function to create a recursive effect
(function loop(){
download(baseURI+year+'/'+id+'/wallpaper/', savePath+id+'.jpg',
function(){
console.log(((id/365)*100).toFixed(2)+'% completed');
if(id == 330)
year = "2014";
if(((id/365)*100) != 100){
id=id+1;
loop();}
});
})(1)
Почему вы рекурсируете, когда между петлями нет зависимости? Почему бы не отправить все запросы на скачивание и собрать результаты? – martypdx
Image Write будет «частично». Буфер вызова-стопа заполняется, что приводит к потере зависания !. – kingspp