如何修复jslint警告不要在循环中创建函数

时间:2014-09-21 11:22:07

标签: node.js asynchronous redis

在以下代码中获取此警告:

  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');
        });
    });
}

有没有人建议如何在不触发警告的情况下完成此操作?

我有一些想法,比如使用异步库并行运行它们,但这是我在整个代码库中做的相当常见的事情,因此对最佳方式的反馈感兴趣。

1 个答案:

答案 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),因为它是由异步处理的。