函数保持初始化局部变量而不是使用现有变量

Function keep initialising local variable instead of using existing variable

我是 javascript 的新手,我正在尝试从 todoist 的不同项目中获取一堆任务,并尝试为这些任务分配标签。

const task_list = {};
for (let id of project_id) {
    api.getTasks({
        projectId: id, filter: "(today | overdue | p1) & !subtask"
    })
        .then((tasks) => { Object.assign(task_list, { id: tasks }); console.log(task_list)})
        .catch((error) => console.log(error))
        
}

for (let id of project_id) {
    console.log(id)
    console.log(task_list.id)
}

这是我目前的代码草稿。底部 for 循环中的 console.log 打印未定义,但 Object.assign 后面的 console.log 能够打印出正确的输出。

请帮忙。

您正在为每次迭代替换 task_list 对象的 id 键,因为 Object.assign 将键和值从一个对象复制到目标对象,在您的例子中是 task_list .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

如果您正在尝试创建哈希 [​​=42=] 以通过 id

跟踪所有任务

你可以改变 task_list 并通过 id

分配它
task_list[id] = tasks

或者用Object.assign

替换原来的task_list
const new_task_list = {}
new_task_list[id] = tasks

task_list = Object.assign(task_list, new_task_list)

或使用 es6 语法

Object.assign(task_list,{[id]:tasks})

在后面的循环中,您可以使用 id 键访问任务值

for (let id of project_id) {
    console.log(task_list[id].id)
}

此外,最后一个循环将打印一个空对象,因为它会在 api.getTasks 完成请求之前执行,您需要创建一个数组来保存所有承诺,然后使用

Promise.all(promises).then(() => {
// your loop here
})

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all