在以下代码中收到此警告:
workflow.removeZSets = function(fn) {
var processed = 0;
for (var c = 1; c < 10; c++) {
workflow.removeZSet(c, function() {
processed++;
if (processed === 9) {
return fn(null, "finished removing");
}
});
}
}
workflow.removeZSet = function(precision, fn) {
rc.zrem("userloc:" + precision, function() {
return fn(null, 'done');
});
});
}
有没有人建议如何在不触发警告的情况下完成此操作?
我有一些想法,比如使用异步库来并行运行它们,但这是我在整个代码库中做的相当普遍的事情,因此我对最佳方式的反馈很感兴趣。
最佳答案
错误是因为您在 for 循环中定义了一个函数。
您可以尝试这样的操作,在循环外定义函数:
workflow.removeZSets = function(fn) {
var processed = 0;
function removeZ(c) {
workflow.removeZSet(c, function(err) {
processed++;
if (processed === 9) {
return fn(null, "finished removing");
}
});
}
for (var c = 1; c < 10; c++) {
removeZ(c);
}
}
使用像 async 这样的库来执行循环将有助于清理您的代码,它可以让您避免检查是否所有项目都已处理(已处理 ===9),因为它是由异步处理的。
关于node.js - 如何修复 jslint 警告 Don't make functions within a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958664/