我正在运行三个API请求,它们使我的JS脚本非常慢。
目标是从API获取数据并将其推送到数据库。
前两个API使用date
和next_page_token
调用。因此,在有下一个页面令牌之前,我一直调用这两个API。我称之为递归。
我将从上面获得的id存储在一个数组中,并将其传递给下面的两个API。
最后一个API调用在循环中运行。我每次都循环遍历id并调用API。
代码:
export async function getFirstAPI(access_token, start, end, globalObject){
let url = 'baseAPI/meetings/from=start/to=end/next_page_token=globalObject.next_page_token';
var obj = {
method: 'GET',
headers: {
authorization: 'Bearer {yourtokenhere}'
}
}
let response = await fetch(url, obj)
let data = await response.json()
return data
}
export async function getSecondAPI(access_token, start, end, globalObject){
let url = 'baseAPI/chats/from=start/to=end/next_page_token=globalObject.next_page_token';
var obj = {
method: 'GET',
headers: {
authorization: 'Bearer {yourtokenhere}'
}
}
let response = await fetch(url, obj)
let data = await response.json()
return data
}
export async function getThirdAPI(access_token, id_array, globalObject){
for(let i=0; i<id_array.length; i++){
let url = 'baseAPI/participants/{id}';
var obj = {
method: 'GET',
headers: {
authorization: 'Bearer {yourtokenhere}'
}
}
let response = await fetch(url, obj)
let data = await response.json()
globalObject.store_data.push(data)
}
return globalObject
}
字符串
当我运行上面的一天。仅这一项就需要14分20秒。如果我运行它为一个更广泛的日期范围,我猜这将持续几个小时!
有什么方法可以优化这段代码吗?还是说跑起来要花这么长时间?
任何建议将是伟大的!
1条答案
按热度按时间rbl8hiat1#
在循环中从
await
切换到Promise.all
或Promise.allSettled
。它会工作得更快。等待不是一颗银。它有帮助,但在您的情况下,您正在等待每次迭代的响应,而不是..类似于“全部启动并收集结果”字符串