axios 如何解决Node.js中的“请求太多”错误?

wfauudbj  于 2022-11-05  发布在  iOS
关注(0)|答案(2)|浏览(223)

我尝试通过使用Axios生成连续的HTTP requests来构建JSON文件:
1.获取对象数组(项目)
1.在每个名为attachments的项目中创建数组属性
1.获取每个项目的任务
1.获取每个任务的附件
1.将每个项目的任务附件推送到项目的附件数组中
1.从已修改的项目数组中创建JSON文件

代码:

let getProjects = function() {
  try {
    return axios.get('https://app.asana.com/api/1.0/projects/')
  } catch (error) {
    console.error(error)
  }
}

let getTasks = function(project) {
  try {
    return axios.get('https://app.asana.com/api/1.0/projects/'+project+'/tasks')
  } catch (error) {
    console.error(error)
  }
}

let getAttachments = function(task) {
  try {
    return axios.get('https://app.asana.com/api/1.0/tasks/'+task+'/attachments')
  } catch (error) {
    console.error(error)
  }
}

async function getAsanaData() {
  let projects = await getProjects()
  return Promise.all(projects.data.data.map(async (project) => {
      project.attachments = []
      let tasks = await getTasks(project.gid)
      return Promise.all(tasks.data.data.map(async (task) => {
        let attachments = await getAttachments(task.gid)
        project.attachments = !!attachments ? project.attachments.concat(attachments.data.data) : project.attachments 
        return project
      }))
  }))
}

getAsanaData()
.then((projects) => {  
  var asanaData = safeJsonStringify(projects);
  fs.writeFile("thing.json", asanaData);
})
.catch(err=>console.log(err))

但我遇到了这个错误:

status: 429,
statusText: 'Too Many Requests

我还没有找到任何有助于解决问题的信息。我该怎么办?

8ljdwjyq

8ljdwjyq1#

HTTP响应状态代码429表示发送的请求太多,超出了服务器的处理能力。https://asana.com/developers/documentation/getting-started/errors中也记录了此情况。https://asana.com/developers/documentation/getting-started/rate-limits中记录的最大允许值是每分钟150个。
所以,是的,正如@兰迪·卡斯伯恩评论的那样,你将不得不限制你的请求。

e5nqia27

e5nqia272#

你被Asana限制了发送太多的请求,达到了最大速率。
发生这种情况时,您需要检查Retry-After响应头,并等待指定的时间,然后再发送另一个请求。
https://asana.com/developers/documentation/getting-started/rate-limits
您还可以在RFC 6585中了解有关HTTP 429的更多信息

相关问题