【发布时间】:2016-09-27 12:24:30
【问题描述】:
在我正在编写的脚本中,我正在遍历邮箱中的一些邮件并尝试删除已阅读的邮件。我遇到的问题是,当我遍历数组时,Node 说它无法在给定元素处找到属性 id(这是删除或查看任何内容所必需的)。如果该属性不存在,这会很好,但是当使用 util.inspect 并指定 1 而不是迭代器变量时,它可以找到并打印该字段。现有代码如下所示:
for(var b = 1; b < length; b++){
setTimeout(function(){
console.log(util.inspect(messageList, false, null));
console.log(util.inspect(messageList[1], false, null));
console.log(util.inspect(messageList[1].id, false, null));
console.log(util.inspect(messageList[b].id, false, null));
var delID = messageList[b].id;
//console.log(util.inspect(messageList, false, null));
if(delID){
gmail.users.messages.trash({
auth:auth,
userId: 'me',
id: delID,
}, function(err2, delObject){
if(err2){
console.log("The message with ID: "+ delID + " could not be deleted");
console.log(err2);
return;
}
else{
console.log(util.inspect(delObject, false, null));
console.log("Message was deleted with id: " + delID);
}
})
}
}, 2000);
}
上面的 messageList 有一个实际数字而不是变量的行显示“157550983b6c1cb”(撇号也会打印出来)。在我用 b 切换它的那一行,它抛出:
TypeError: Cannot read property of undefined
at Timeout.oneTimeout(.......etc)
at tryOnTimeout(timers.js:232:11)
at Time.listonTimeout(timers.js:202:5)
这是否意味着无法在 Timeout 函数中使用变量 b?如果是这样,我如何绕过需要遍历整个 messageList 并在删除之间中断?
【问题讨论】:
-
b和 messageList 值是什么? -
b 介于 1 和数组长度之间,应该为每个数字调用该函数。但是它在第一个循环中抛出了一个错误,所以它在中断之前只有 1 个。 messageList 是一个包含两个字段的对象列表:id 和 threadId,可以使用 util.inspect 查看
-
Id
id在messageList中不可用,您尝试访问它会出错 -
是的,我知道这就是错误的意思。我遇到的问题是,在上述 4 个控制台日志中的 3 个中,我可以看到我想要的。在最后一个我有“b”而不是数字 1 的地方,它表示该对象不存在。当指定 1 时,它打印出 id 就好了。
-
你能在那个控制台前检查你的
b值吗?
标签: javascript arrays node.js object timeout