У меня есть функция, которая использует модуль cherio для получения данных с веб-сайта.Iterate over async function
Теперь я хотел бы повторять эту функцию через массив ключевых слов, собирать промежуточные результаты в массив с именем статистики и, наконец, распечатать результаты массива статистики на консоль с помощью console.log()
Всякий раз, когда я запускаю этот скрипт, он быстро запускает функцию async и печатает пустой массив статистики.
Теперь мой вопрос: как я могу ожидать завершения функций асинхронизации, чтобы я мог печатать массив на консоли, когда он заполнен/закончен.
У меня много googled и искал переполнение стека. Кажется, есть много способов достичь моей цели, но что является самым идиоматичным способом в этом узле?
Вот как я ее решил:
var request = require("request"),
cheerio = require("cheerio"),
base_url = "http://de.indeed.com/Jobs?q="; // after equal sign for instance: sinatra&l=
/* search syntax:
- http://de.indeed.com/Jobs?q=node&l=berlin&radius=100
-
-
*/
// //
var search_words = ["django", "python", "flask",
"rails", "ruby",
"node", "javascript", "angularjs", "react",
"java", "grails", "groovy",
"php", "symfony", "laravel"
];
var counter = 0;
var stats = [];
function getStats(keyword) {
url = base_url + keyword + "&l=";
request(url, function(err, resp, body) {
if(!err) {
$ = cheerio.load(body);
data = $("#searchCount")[0].children[0].data.split(" ").reverse()[0];
stats.push([keyword, data]);
counter++;
}
// list complete?
if (counter === search_words.length) {
console.log(stats);
}
});
}
for (var j=0; j<= search_words.length; j++) {
getStats(search_words[j]);
}
Я только что запустил ваш код, и он отлично работает. Конечно, это нехорошее решение, но хорошо работает. –