【问题标题】:How to avoid creating a function inside a loop?如何避免在循环内创建函数?
【发布时间】:2016-04-06 21:35:19
【问题描述】:

我正在使用REST 调用收集一些数据。

我有以下函数调用“目录”端点,该端点返回我的人员列表

我可以获得有关他们孩子的更多信息。
现在要获取他们的个人信息,我必须访问他们各自的 API。

var listOfPeople = [];
var numberOfKids = [];

//using superagent    
var req = request.get(ApiPrefix + "/directory");

    req.end(function (err, res) {
                if (err || !res.ok) {
                    console.log("Error obtaining directory");
                } else {

                    listOfPeople.add(res.body);

                    // loop to retrieve all events.
                    for (var i = 0; i < res.body.length; i++) {
                        var personID = res.body[i].id;

                        $.getJSON('/directory/person', {
                                id: personID
                            },
                            function (result) {
                                numberOfKids.add(result);
                            });
                    }
                }
            });

虽然上面的代码运行良好,但我收到了来自Gulp watch 的错误:

line 67, col 30, Don't make functions within a loop. (W083)
1 error

那么,我如何在期望完全相同的行为的同时解耦循环和 AJAX 调用?

【问题讨论】:

  • 将函数移动到循环之前...给它一个名称或变量名称,并使用它而不是文字。因为它可以看到全局并传递动态,所以放置无关紧要。你甚至可以用这个文字 numberOfKids.add 或最坏情况下的 numberOfKids.add.bind(numberOfKids) 替换文字

标签: javascript jquery ajax gulp superagent


【解决方案1】:

我认为您可以删除 for 循环并开始使用 Array.forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

支持所有最新的浏览器

在你的情况下,你的 for 循环应该修改为

res.body.forEach(function(person){
   var personId = person.id;
   // your getJson call comes here 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多