0

我是 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 正在打印 undefined 但 Object.assign 后面的 console.log 能够打印出正确的输出。

请帮忙。

4

1 回答 1

1

您正在为每次迭代替换 task_list 对象的 id 键,因为 Object.assign 将键和值从对象复制到目标对象,在您的情况下是 task_list 。

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

如果您尝试创建一个哈希表来按 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

于 2022-02-01T11:09:55.813 回答