node.js - 如何修复 jslint 警告 Don't make functions within a loop

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

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

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

最佳答案

错误是因为您在 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/

相关文章:

node.js - 需要 npm 包后出错

javascript - Node.js Busboy 分别解析字段和文件

javascript - 正则表达式,JS : Match text to end of line after specific word without including word in match

Nginx-redis 模块返回字符串长度以及来自 Redis 的值

node.js - 在本地运行 Cloud Functions 会出现错误 "functions.config() is not available"

javascript - Promise.race 在第一次履行后是否会拒绝其他 promise ?

c# - 在 UI 线程上使用 await 是否与阻塞调用相同?

asynchronous - C# 中的await 异步如何工作

java - 哪种内存缓存实现需要花费最少的精力来构建

azure - 是否可以更改 Azure Redis 数据库的数量?