如何解决 Node.js 中的“Too Many Requests”错误?

4
我正在尝试使用Axios通过连续的HTTP请求来构建一个JSON文件:
1. 获取一个对象数组(项目) 2. 在每个项目中创建一个名为attachments的数组属性 3. 获取每个项目的任务 4. 获取每个任务的附件 5. 将每个项目的任务附件推入项目的attachments数组中 6. 从修改后的项目数组中创建一个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

我还没有找到任何有用的东西来解决这个问题。我该怎么办?

听起来,正如它所说的那样,你可能正在进行过多的请求 - 你的当前代码一次性发出了多少个请求? - CertainPerformance
你需要对请求进行节流 - Asana 可能会限制你的请求。建议使用 underscore 或 lodash。两者都有一个 throttle 方法来减缓请求的速度。 - Randy Casburn
@CertainPerformance 抱歉,我还不知道如何获取反馈,例如尝试请求的数量。但是根据数据的估计,可能有数千个请求。 - Gabriel Rivera
阅读:https://asana.com/developers/documentation/getting-started/rate-limits - Randy Casburn
projects.data.data 数组有多大? - jfriend00
2个回答

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接