Переменная сохраняет первоначальное значение, несмотря на то, что имеет новое значение раньше и дальше в функции - PullRequest
0 голосов
/ 03 ноября 2018
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)
  }
}

async function getAsanaData() {
    let projects = await getProjects()
    projects = projects.data.data
    projects.map(async (project) => {
        //project.attachments = []
        let tasks = await getTasks(project.gid)
        if(tasks != undefined){
          tasks = tasks.data.data 
          project.tasks = tasks
          //console.log(projects)
        }
    })
    console.log(projects)
    return 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))

В getAsanaData(), projects имеет новое значение после project.tasks = tasks.

Однако, его оригинальное значение печатается console.log(projects) до return projects.

Это, конечно, также означает, что будет возвращено исходное значение, а не необходимое новое значение.

В чем причина и как мне ее устранить?

1 Ответ

0 голосов
/ 03 ноября 2018

Попробуйте это:

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

Это будет проходить через асинхронные вызовы getTasks и возвращаться для каждого проекта. Тогда вы должны разрешить их все через Promise.all

...