即使成功映射数组,该数组也为空

时间:2018-02-19 03:25:18

标签: javascript jquery underscore.js

我遇到了_.map的问题(使用underscore.js http://underscorejs.org)。

getCalories: function() {
  var encode = "1%20";
    var calSource = "https://api.edamam.com/api/nutrition-data?app_id=#&app_key=#";
    _.map(ingArray, function(elem)
    {
     return $.ajax(calSource, {
      dataType: "json",
      jsonp: "jsonp",
      data: "ingr=" + encode + elem,
      complete: function(r) {
        var obj = JSON.parse(r.responseText);
        var calorie = obj.calories;
        calArray.push(calorie);
        console.log(calArray);
      }

    });
  });
},

我需要在另一个函数中使用calArray的最新迭代。但是,它始终是未定义的。所以我在上面插入了一个console.log,这就是我得到的:

app.js:177 is the console.log 这是一个范围问题吗?此外,如果它在推送之前进行了日志记录,那么我可以看到为什么它会以未定义的方式出现。我该如何解决它?

1 个答案:

答案 0 :(得分:0)

我相信下划线的map产生一个新数组,在你的情况下,新数组将包含一堆承诺(ajax-requests)

您可能希望首先将其分配给变量,如下所示:

getCalories: function () {
    var encode = "1%20";
    var calSource = "https://api.edamam.com/api/nutrition-data?app_id=#&app_key=#";
    var requests = _.map(ingArray, function(elem) {
        return $.ajax(calSource, {
            dataType: "json",
            jsonp: "jsonp",
            data: "ingr=" + encode + elem
        });
    });

    $.when.apply($, requests).then(function(results) {
        console.log(results); // can you take a screenshot of this output
        var calories = _.map(results, function(result) {
            return JSON.parse(result.responseText).calories;
        });
        calArray = calArray.concat(calories);
    });
}