Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使已成功映射,数组也为空_Javascript_Jquery_Underscore.js - Fatal编程技术网

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

Javascript 即使已成功映射,数组也为空,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我遇到了关于u.map(使用下划线.js)的问题 我需要在另一个函数中使用calArray的最新迭代。然而,它总是被认为是未定义的。因此,我在上面插入了一个console.log,得到的结果如下: 这是一个范围问题吗?另外,如果它是在推之前记录的,那么我可以理解为什么它会出现未定义。如何绕过它?我相信下划线的映射会生成一个新数组,在您的情况下,新数组将包含一系列承诺(ajax请求) 您可能希望首先将其分配给变量,如下所示: getCalories: function () { var

我遇到了关于u.map(使用下划线.js)的问题

我需要在另一个函数中使用calArray的最新迭代。然而,它总是被认为是未定义的。因此,我在上面插入了一个console.log,得到的结果如下:


这是一个范围问题吗?另外,如果它是在推之前记录的,那么我可以理解为什么它会出现未定义。如何绕过它?

我相信下划线的
映射会生成一个新数组,在您的情况下,新数组将包含一系列承诺(ajax请求)

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

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);
    });
}

代码的预期结果是什么?它是否意味着将所有结果推送到一个数组中?是的,将每个Ajax请求的结果(每次循环一个diff数据参数)推送到一个新数组中。谢谢!我尝试了它,收到了这个错误:似乎
结果
数组是从
$传递的。当(…)。然后(…)
不是响应对象,你能分享你从
控制台得到的结果吗。log(results)
更新了上面的代码啊,我认为
$。当
期望承诺作为参数,而
请求
是数组时,我已经更新了代码
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);
    });
}