【发布时间】:2020-08-12 10:58:41
【问题描述】:
我知道有人问过类似的问题,我已经尝试理解它们并将其应用于我自己的问题,但我还没有能够使任何事情发挥作用。
以下代码是 Adonis.js 控制器中的一个函数。
它应该获取一个搜索词并使用 Google 搜索 API (serpApi) 搜索该词,然后返回一个 URL 数组。
但是,目前我只能将它发送到 console.log 的“链接”,但我想在调用函数“googleSearch”时返回一个链接数组。
async googleSearch(searchTerm) {
let client = new GSR.GoogleSearchResults("[MyApiKey]")
var parameter = {
q: `${searchTerm}`,
hl: "en",
gl: "us",
google_domain: "google.com",
};
const callback = function(data) {
let links = [];
for (let i = 0; i < data.organic_results.length; i++) {
links.push(data.organic_results[i].link)
}
console.log(links)
}
client.json(parameter, callback)
}
当我从回调函数中进行控制台日志时,我可以看到我需要的数据,但是,我想在调用父函数时返回此数据,而不是将其记录到控制台。
我知道问题出在异步/同步区域的某个地方,我已尽我所知尝试解决重新组织回调和更改事物顺序的问题,但我似乎无法让它工作。
以下是我试图实现的示例,显然它不起作用,但也许有助于澄清事情。
async googleSearch(searchTerm) {
let results= []
let client = new GSR.GoogleSearchResults("[MyApiKey]")
var parameter = {
q: `${searchTerm}`,
hl: "en",
gl: "us",
google_domain: "google.com",
};
const callback = await function(data) {
let links = [];
for (let i = 0; i < data.organic_results.length; i++) {
links.push(data.organic_results[i].link)
}
results.push(links)
}
client.json(parameter, callback)
return results
}
【问题讨论】:
标签: javascript node.js asynchronous callback adonis.js