我遇到了_.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 这是一个范围问题吗?此外,如果它在推送之前进行了日志记录,那么我可以看到为什么它会以未定义的方式出现。我该如何解决它?
答案 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);
});
}