" ESLint no-loop-func rule"在回调中需要循环变量时该怎么做

时间:2016-04-29 07:52:23

标签: javascript node.js ecmascript-6 eslint

我工作的公司要求我们遵循no-loop-func ES-lint规则。我处于回调中需要循环变量的情况。

下面可以找到一个例子:

watch netstat -a | grep ESTABLISHED | grep -c ':7003$'

如何重构代码以便满足规则?

4 个答案:

答案 0 :(得分:6)

不要使用循环。迭代器方法要好得多。

uniqueIdentifiers.forEach(function(uid) {
    this.database.removeFileReference(uid, function (err) {
        if (err) {
            NotificationSystem.logReferenceNotRemoved(uid, undefined);
        }
    });
}, this);

callback(null);

要在完成所有操作后拨回电话,您将需要以下内容:

var db = self.database;

var promises = uniqueIdentifiers.map(function(uid) {
    return new Promise(function (res) {
        db.removeFileReference(uid, function (err) {
            if (err) {
                NotificationSystem.logReferenceNotRemoved(uid, undefined);
            }
            res();
        });
    });
});

Promise.all(promises).then(callback);

答案 1 :(得分:0)

我将ESList用于我的所有JavaScript,并且我遵守no-loop-func规则,如果你不这样做,它会严重伤害你。原因在这里得到了很好的解释:JavaScript closure inside loops – simple practical example

我建议在重构方面有其他答案。

答案 2 :(得分:0)

可以使用cars解决您的问题吗?

bind

答案 3 :(得分:0)

我还将对象转换为数组,然后用于每个。