【问题标题】:How to fix jslint warning Don't make functions within a loop如何修复 jslint 警告不要在循环中创建函数
【发布时间】:2014-11-15 12:13:14
【问题描述】:

在以下代码中收到此警告:

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

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

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

【问题讨论】:

  • 什么样的警告?可以留言吗?

标签: node.js asynchronous redis


【解决方案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),因为它是由 async 处理的。

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2013-03-17
    • 1970-01-01
    • 2011-10-15
    • 2014-08-17
    • 2017-10-25
    • 1970-01-01
    • 2015-06-17
    • 2018-09-26
    相关资源
    最近更新 更多