Проблема в том, что вы пытаетесь выполнить асинхронность в l oop, которая не работает так, как вы ожидаете. Вам нужно либо использовать Promise.all
, либо использовать for..of
l oop с ожиданием. Вы можете сделать Promise.all
так, как это.
async function singleSearch(q, cx, auth) {
const res = await customsearch.cse.list({
"cx": cx,
"q": q,
"auth": auth
});
return res.data;
}
function search(words, apikey = process.argv[2], engineid = process.argv[3]) {
const limit = 32; // 32 word limit on google search
const searchQueries = [];
const len = Math.ceil(words.length / limit);
for (var i = 0; i < len; i++) {
searchQueries.push(words.slice(i * limit, (i + 1) * limit).join(" "));
}
return Promise.all(searchQueries.map(query => {
return singleSearch(query, engineid, apikey).catch(console.error);
}));
}
(async () => {
const a = await search("Do I understand it correctly that anotherCall() will be called only when someCall() is completed? What is the most elegant way of calling them in parallel?".split(" "));
console.log(a);
})();