在以下代码中获取此警告:
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');
});
});
}
有没有人建议如何在不触发警告的情况下完成此操作?
我有一些想法,比如使用异步库并行运行它们,但这是我在整个代码库中做的相当常见的事情,因此对最佳方式的反馈感兴趣。
答案 0 :(得分:1)
错误是因为您在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),因为它是由异步处理的。