У меня есть конечная точка в моем API Node.js, которая возвращает массив результатов JSON, предоставленный библиотекой Google-Search-Scrapper.
app.get('/google_image_search', (req, res) => {
var options = {
query: 'grenouille',
age: 'y', // last 24 hours ([hdwmy]\d? as in google URL)
limit: 10,
params: {} // params will be copied as-is in the search URL query string
};
var results = [];
scraper.search(options, function(err, url, meta) {
sem.take(function() {
if(err) throw err;
var result = {
title: meta.title,
meta: meta.meta,
description: meta.desc
}
results.push(result);
sem.leave();
});
})
console.log(results);
res.json({
results
});
})
Мне нужен console.log (результаты) иres.json ({результаты}) должен произойти после выполнения функции scraper.search.В настоящее время он всегда возвращает пустой массив.
Функция, переданная функции scraper.search (), вызывается для каждого результата.Поэтому, если есть 10 результатов, функция запускается 10 раз, поэтому я жду, пока массив не заполнится, чтобы отправить ответ.
Я пытался использовать семафоры и мьютексные блокировки в разных местах, но безуспешно.Любой совет приветствуется.
Эта проблема была решена с помощью переменной LIMIT для проверки моего массива результатов.Изложенное в ответе помечено правильно ниже.
Спасибо всем за вклад.