【发布时间】:2016-04-18 19:59:22
【问题描述】:
我在清理我的代码时遇到了一些回调问题,特别是在调用回调时要输出正确的值。可以向我解释为什么下面的代码会吐出我不期望的东西和可能的解决方案,而不必将 i 的另一个参数放入 run() 函数,或者传入 i在调用回调时知道我的索引是执行此操作的唯一方法吗?
for (var i in dls) {
run(dls[i][0], dls[i][1], function(isTrue){
if (isTrue) {
// Do true stuff here
} else {
console.log("Value is: " + dls[i][3])
}
});
}
调用 run() 实际上在内部有正确的输入,但是在该函数调用回调并进入 else 语句时,dls[i][3] 会输出 i 次相同的值。
我尝试在 (run()) 等周围放置不同的范围,但无济于事,似乎无法解决这个问题。
谢谢
编辑:
如果我想把它拆分成一个单独的函数,我该怎么做?
var run = function(cb){
setTimeout(function() {
cb(false)
}, 3000);
}
for (var i in dls) {
run(dls[i][0], dls[i][1], (function(index) {
return extraction
})(i));
}
function extraction(isTrue){
if (isTrue) {
// stuff
} else {
console.log("Nothing changed in " + dls[i][3])
}
}
这里 dls[i][3] 仍然不正确,打印了 3 次相同的值。
【问题讨论】:
-
我查看了那个帖子,但仍然找不到潜在的解决方案,因此我问了这个问题,但感谢您为我指明了正确的方向。
标签: javascript node.js callback