使用Axios和Promises构建JSON在多个级别执行多个循环

时间:2018-11-02 17:27:29

标签: javascript node.js json promise axios

我正在尝试通过使用JSON连续创建HTTP requests来构建Axios文件。到目前为止,这是我已经完成的事情:

  1. 获取对象(项目)的数组
  2. 在每个名为task的项目中创建一个数组属性
  3. 获取每个项目的任务
  4. 将每个项目的任务推入其task属性(即,在每个项目对象中填充该数组)
  5. 返回修改后的项目数组

代码:

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').then(response => { return response } )
    return axios.get('https://app.asana.com/api/1.0/tasks/'+task+'/attachments?opt_fields=download_url,view_url,permanent_url')
  } catch (error) {
    console.error(error)
  }
}

function getAsanaData() {
  return getProjects()
    .then((result) => {
      const projects = result.data.data;
      const taskPromises = projects.map((project) => {
        return getTasks(project.gid)
          .then((task) => {
            project.tasks = task.data.data;
          });
      });
      return Promise.all(taskPromises)
        .then(() => projects);
  });
}

Promise.try(() => {    
  return getAsanaData();
}).then((result) => {
  console.log(util.inspect(result, {showHidden: false, depth: null}))
  //var asanaData = safeJsonStringify(result);
  //fs.writeFile("thing.json", asanaData);
})
.catch(err=>console.log(err))

其他要求:

类似于在每个项目中创建一个数组属性并将其填充到项目的任务对象中,我需要:

  • 在每个 task 中创建一个数组属性,并用任务的附件填充它,然后返回以此方式修改的projects数组
  • 与其先给项目分配任务,然后给它们附加附件,不给项目分配任务的附件,然后返回以此方式修改的项目数组。

后一种方法的最终结果无论如何都是目标。我只需要每个项目都具有其所有任务的附件。这些任务只是达到此目的的手段。

我多次尝试重写该代码,以达到预期效果。怎么做到呢?

0 个答案:

没有答案