Я новичок в node.js (и request.js). Я хотел бы вернуть тело веб-сайта из определенного URL-адреса с разными путями (в примере ниже http://www.example.com/path1, http://www.example.com/path2 и т. Д.) И зарегистрировать эти данные в объекте с отображением ключа/значения (siteData [путь] ниже).Асинхронный запрос внутри ForEach в node.js
var request = require('request'),
paths = ['path1','path2','path3'],
siteData = {},
pathLength = paths.length,
pathIndex = 0;
paths.forEach((path) => {
var url="http://www.example.com/"+path;
request(url, function(error, response, html){
if(!error){
siteData[path] = response.body;
pathIndex++;
if(pathIndex===pathLength){
someFunction(siteData);
}
}
});
function someFunction(data){
//manipulate data
}
Мои вопросы:
- Условный оператор (индекс === длина) не похож на правильный путь, чтобы определить, асинхронные запросы закончены. Как правильно проверить, завершены ли запросы?
- Когда я выполняю код выше, я получаю сообщение об ошибке
(node) warning: possible EventEmitter memory leak detected. 11 unpipe listeners added. Use emitter.setMaxListeners() to increase limit.
Я пробовал цепочкиrequest(url, function(...){}).setMaxListeners(100);
, но это не сработало.
Благодарим за помощь!