我在节点中,我有一个 obj 数组{suggestion: 'text', rank: '2'}
,我想用它来调用 bing 以获得每个对象的第一个结果。
目前,我已经使用Promise.all
await Promise.all(suggestions.map(async (s, i) => await bingWebSearch(s.suggestion.replace(/\s/g, '+'), i)))
.then(r => {
suggestions.map((s, i) => console.log(`
n${i+1}. ${s.suggestion} | times suggested: ${s.rank} | url: ${s.webpage}
`))
})
.catch(e => e.message)
这将调用函数 bingWebSearch 并将网站 URL 分配给 obj
const bingWebSearch = async (query, i) => {
return await axios.get('https://api.bing.microsoft.com/v7.0/search?', {
headers: {
'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY
},
params: {
count: 1,
mkt: 'en-US',
q: query
}
}).then(r => {
if (r.data.webPages) return suggestions[i].webpage = r.data.webPages.value[0].url
}).catch(e => console.log(e.message))
}
所以基本上,这将触发 30 次对 bing 的调用,但我只能做 3/秒我怎样才能实现它?我尝试过使用 setTimeOut,但使用异步函数有点棘手,所以它不起作用。