Имея проблему, оцените любую помощь.выпуск с использованием асинхронного модуля в Node.js
Я пытаюсь собрать все мои асинхронные функции вместе. Пробовал async.parallel, async.each, gather-gm. Ничто не делает окончательную работу обратного вызова. Вот обновленный код (но не работает должным образом):
var calls = [];
async.each(parser.allHrefs,function (href,callback) {
getHtml(href,function(err, add){
console.log("Passing data: " + href);
if(err){
return callback(err);
};
if(add){
calls.push(href);
};
return callback();
});
}, function (err) {
if(err){
console.log('something went wrong');
}else{
console.log('finished');
};
});
И первая функция:
function getHtml(link, callback) {
httpreq.get(link, function(err, res) {
if(err) {
return callback(err);
}
if(res.statusCode >= 300) {
return callback(null, false);
} else {
//cut parsing code here...
return callback(null, true);
}
});
}
p.s.:I've обновил раз код пару. В этом примере я попытался использовать async.parallel. И дело в том, что даже когда я даже не получаю ошибок, я до сих пор не добираюсь до функции getLocations. Код выглядит намного лучше, чем первые версии, но все же отказывается работать правильно.
Вы уверены, что gethtml зовут обратный вызов? –
Есть вероятность, что вы можете вызвать gethtml и не вызвать callback. Вы должны убедиться, что он ВСЕГДА выполняет «обратный вызов» независимо от результата. Если это ошибка, отправьте ошибку на обратный вызов. –
'parallel' отличается от' each', потому что первый выполняет массив функций, а второй перемещается по массиву и выполняет ту же функцию для каждого элемента. Другое дело, что gethtml не возвращает значение, поэтому вы не нажимаете ничего на массив 'calls'. – Osukaa