【发布时间】:2018-11-02 22:10:46
【问题描述】:
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 之前打印的。
这当然也意味着将返回原始值而不是必要的新值。
这是什么原因,我该如何解决?
【问题讨论】:
-
Array.map()返回一个新数组,它不会就地修改它。 -
你什么时候看日志?由于您正在更新对象,每次循环,并且控制台包含对该对象的实时引用,它会根据您展开它的时间而改变。
-
@Barmar project.tasks = tasks 之后的日志表明项目添加了任务数组。返回之前的日志以及后来编写的 JSON 文件显示没有添加任务数组的项目。
-
@pmkro 所以现在如果我将 projects = 设置为新数组,然后尝试返回项目,我只会得到未决的承诺。
标签: javascript node.js scope async-await axios