【发布时间】:2017-07-11 12:53:25
【问题描述】:
我有一个奇怪的问题,如果我硬编码一个变量,我的代码就可以工作。当代码设置变量时,我得到奇怪的结果。但是使用控制台日志我可以看到变量是正确的值。我可以从字面上复制控制台值并将其粘贴到变量的位置,它会起作用。
function CheckInboxes (boxes, count=0) {
console.log('-----------------------------------------')
console.log('checking: ' + boxes[count] + ' | ' + count)
console.log('-----------------------------------------')
OpenInbox(boxes[count]).then(box => { //If I set this to 0 or any other value count would be, it works.
console.log('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^')
console.dir(box)
console.log('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^')
if(count < boxes.length -1) {
var test = count + 1
CheckInboxes(boxes, test) }
else
console.log('FINISHED<<<<<<<<<<<<<<<<<<<<<<<<<<')
})
}
boxes 是邮箱名称数组,即“收件箱”、“草稿”、“等”
OpenInbox 函数返回一个定义该收件箱(文件夹)的对象。这包括名称。名称应与第一个参数匹配。所以 OpenInbox('inbox') 返回一个名称属性为“inbox”的对象,因为库搜索具有该名称的文件夹并返回与其关联的对象。
问题是,如果没有硬编码,这不会发生。它完全随机。返回的对象可以是草稿或任何其他文件夹。有时它恰好是正确的文件夹。
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> ----------------------------------------- checking: Inbox | 0
> ----------------------------------------- opening...Inbox
这清楚地显示了它的 0 及其传递的“收件箱”。结果将是随机的。但是,如果我更换
OpenInbox(boxes[count])
与
OpenInbox(boxes[0]) //or just 'inbox'
它有效。这当然不实用……
所以我很困惑。控制台清楚地显示了正在传递的内容,但除非我对控制台中输出的值进行硬编码,否则它不起作用。这应该是不可能的。我错过了什么吗?
更新:
所以我偶然添加了这段代码:
console.dir(box)
console.log(box.name)
console.log(JSON.stringify(box))
结果是……
注意下划线部分完全不同。
这让我认为它是 chrome console.log 中的错误或其他什么,因为 stringify 显示了我期望的数据。
【问题讨论】:
-
我注意到
OpenInbox返回了一个promise - 这表明它正在执行异步操作,您可能会看到您所做的结果,因为您没有正确处理回调或promise。发布您的OpenInbox代码,我们可以肯定地看到。
标签: javascript arrays node.js recursion memory