函数保持初始化局部变量而不是使用现有变量
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
我是 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_listconst 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