【发布时间】:2023-02-21 22:19:43
【问题描述】:
我想向 google api 发出异步请求并将结果保存在一个数组中。我试图以某种方式从 apiHandler 返回值的尝试失败了。我不知道我需要在哪里获取这些数据。你能帮助我吗?
我对 js 不是很有经验,更不用说异步 js 了。
import { queue } from "async";
import fetch from "node-fetch";
let concurrency = 10; // How many async processes will be running
let KEY = '';
let ids = [
'sMTs5bvAsGA',
'kW5X4dU0gnY',
'dX2hyyKFIHA',
'91egEkKuVas',
'DfhKbYXRu6Q',
'hQdOqC-1tVg',
'AOwFmabnb7s',
];
let data = [];
export const taskQueue = queue(async (task, done) => {
try {
let data = await task();
done;
return data;
} catch (err) {
throw err;
}
}, concurrency);
taskQueue.drain(() => {
console.log("All items completed!\n");
process.exit();
});
export function getItems(video_ids) {
video_ids.forEach((id) => {
taskQueue.push(() =>
apiHandler(`https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideo=${id}&maxResults=50&type=video&key=${KEY}`),
(err) => {
if (err) {
console.log(err);
throw new Error('Error getting data.');
}
})
});
};
async function apiHandler(url) {
const response = await fetch(url);
const data = await response.json();
return data;
}
getItems(ids);
【问题讨论】:
-
不应该是
done()而不是done吗? -
您的 api 处理程序不返回任何内容。您正在将函数推送到数组?
-
@Konrad,如果我将其更改为 done(),此代码将抛出异常“done 不是函数”
-
@epascarello,我删除了返回行
-
我运行了您的代码,对我来说效果很好
标签: javascript node.js asynchronous google-api queue