Создайте JSON, выполняющий несколько циклов на нескольких уровнях с помощью Axios и Promises - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать файл JSON, сделав последовательно HTTP requests с Axios. Это то, чего я достиг до сих пор:

  1. Получить массив объектов (проектов)
  2. Создать свойство массива в каждом проекте с именем tasks
  3. Получить задачи каждого проекта
  4. Вставить задачи каждого проекта в его свойство задач (т.е. заполнить этот массив в каждом объекте проекта)
  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))

Дальнейшее требование:

Аналогично созданию свойства массива в каждом проекте и заполнению его объектами задач проекта, мне нужно либо:

  • Создайте свойство массива в каждой задаче и заполните его вложениями задачи, а затем верните массив проектов, измененный таким образом
  • Вместо того, чтобы сначала давать проектам свои задачи, а затем отдавать им вложения, только давать проектам вложения их задач, а затем возвращать массив проектов, измененный таким образом.

Конечным результатом последнего подхода является цель, во всяком случае. Мне нужно, чтобы у каждого проекта были вложения всех его задач. Задачи являются лишь средством для достижения этой цели.

Я много раз переписывал код, пытаясь добиться такого результата. Как это можно сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...