Цитата:
Раньше они могли выполняться параллельно, а тут я их последовательно запустил. Возможно, что при обращении к странице произойдет какая то ошибка? Что в этом случае надо делать? Просто не помещать 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, время: 05:08. |