【发布时间】:2019-07-04 06:03:11
【问题描述】:
我的 Node.js API 中有一个端点,它返回由 Google-Search-scraper 库提供的 JSON 数组结果。
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(results) 和 res.json({ results }) 在 scraper.search 功能完成后发生。它目前总是返回一个空数组。
每个结果都会调用传递给 scraper.search() 函数的函数。因此,如果有 10 个结果该函数运行 10 次,这就是为什么我要等到数组已满才发送响应。
我尝试在不同的地方使用信号量和互斥锁,但没有成功。任何建议表示赞赏。
这是通过使用 LIMIT 变量来检查我的结果数组来解决的。在下面标记为正确的答案中概述。
感谢大家的意见。
【问题讨论】:
-
不是重复但相关的问题,它没有解释如何解决这个特定库的问题。
标签: javascript node.js api asynchronous semaphore