Я использую cheerio, request и Node.js.Node.js + Cheerio: запрос внутри цикла
Когда я запускаю сценарий ниже, он выводит имена в неправильном порядке. Я считаю, что это вызвано асинхронным характером этого, как я могу заставить его работать в «правильном» порядке? Нужно ли использовать пакет синхронизации или есть способ изменить его таким образом, чтобы он работал синхронно?
app.get('/returned', function (req, res) {
for (var y = 0; y < 10; y++) {
var url = "http://example.com" + y + "/person.html";
request(url, function (err, resp, body) {
$ = cheerio.load(body);
var links = $('#container');
var name = links.find('span[itemprop="name"]').html(); // name
if (name == null) {
console.log("returned null");
} else {
console.log(name);
}
});
}
});
все зависит. Вы хотите отправлять запросы параллельно или последовательно. В серии будет гораздо медленнее, чем параллельно, если сервер, на который вы запрашиваете, может обрабатывать более одного запроса за раз. Его можно обрабатывать параллельно, сохраняя при этом результаты в том порядке, в котором вы хотите. –
Параллельно. Я думаю, что async выполнит эту работу (ответил @ dm03514), я рассмотрю ее. – salep
Обратите внимание, что его ответ работает последовательно, а не параллельно. но у async есть параллельный параметр, вам просто нужно как-то сохранить результаты в том порядке, который вы хотите, независимо от того, что они будут вызваны из строя. –