Цитата:
Раньше они могли выполняться параллельно, а тут я их последовательно запустил. Возможно, что при обращении к странице произойдет какая то ошибка? Что в этом случае надо делать? Просто не помещать data в results? И еще вопрос. Имеет ли значение, что в result данные должны быть именно в той последовательности, как URL (в зависимости от i)? Ведь при параллельной обработке не гарантируется, что страница, запрошенная раньше, будет раньше и обрабатываться. Как считается так и обработается. А если использовать results.push(data), то данные в results будут идти той последовательности, как страницы считались и обработались. Пока попробуй такой код. Тут страницы снова считываются параллельно, и есть некоторая обработка возможных ошибок в виде сообщений.
var request = require ('request');
var cheerio = require ('cheerio');
const fs = require('fs');
var results = new Array();
var pagesCount = 47;
let proms = [];
for (let i = 0; i < pagesCount; i++){
proms.push( new Promise ((res, rej) => {
let URL = 'здесь ссылка плюс ид страницы='+i;
request(URL, function (error, response, html) {
if (!error && response.statusCode == 200) {
let $ = cheerio.load(html);
$('tr:not(.spacer)').each(function(i, element){
// Тут происходит много строчек кода селекторов и записи в объект data.
console.log(data);
results.push(data);
});
res();
} else {
console.log(`Error ${error}, url: ${URL}, statusCode: ${response?.statusCode}`);
rej (error);
}
});
})
)
}
// В конце мне все это нужно сохранить в JSON, То есть записать массив result
Promise.allSettled(proms).then (_=> {
console.log('saving...');
fs.writeFileSync("data.json", JSON.stringify(results,null,4));
});
|
voraa, нет, для результата нет разницы в последовательности обработанных страниц, параллельность тут только приветствуется. Поэтому я раньше именно так и обходил все страницы.
Нода выдает сообщения об ошибках, но обычно синтаксические больше. Там все было без ошибок. Новый код работает как надо, каждый раз выдает одно и то же на выходе и нет сообщений об ошибке) Спасибо, думаю задачку можно считать решенной) |
| Часовой пояс GMT +3, время: 01:46. |