javascript - javascript 中的数组行为

标签 javascript arrays angularjs

<分区>

出于某种原因,下面的代码会产生意外行为。

console.log(chartIntervals.length);

显示“0”而不是预期的“10”。

console.log(chartIntervals);

显示一个包含 10 个元素、长度为 10 的数组。

console.log(chartIntervals[3]);

显示“未定义”。

我是 JavaScript 的新手。这是 angularJS Controller 的一部分。 response.data.count 是在另一个服务文件上处理的 django API 响应的整数部分。

如有任何帮助,我们将不胜感激。

    var getPriceChartCounts = function(filter) {
                var savedMinPrice = filter.priceMin;
                var savedMaxPrice = filter.priceMax;
                filter.priceMin = 0;
                filter.priceMax = 100000;
                var chartIntervals = [];

                for (var i = 0; i < 10; i++) {
                    Properties.getByFilter(filter,Map.getMapBounds()).then(function(response){
                        chartIntervals.push(response.data.count);
                    });
                    filter.priceMin = filter.priceMin + 100000;
                    filter.priceMax = filter.priceMax + 100000;
                }

                filter.priceMin = savedMinPrice;
                filter.priceMax = savedMaxPrice;
                console.log(chartIntervals.length);
                console.log(chartIntervals);
                console.log(chartIntervals[3]);

                return chartIntervals;
            }

最佳答案

chartIntervals 正在异步填充,正如您在 .then 中看到的那样.在你 console.log 它的时候,请求刚刚发出 - 他们还没有回来,所以 chartIntervals 仍然只是一个空数组,所以它的长度是 0 和 chartIntervals[n]对于任何 n未定义。

如果您希望您的代码在继续之前等待数组被填充,请使用 Promise.all .

关于javascript - javascript 中的数组行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49526766/

相关文章:

javascript - D3 fiddle 谱

javascript - Mongoose 中的自定义排序功能

javascript - 从对象中的其他数组创建数组

javascript - 如何在 ng-repeat 中为多个选择填充动态选项

javascript - 页面不会重定向到无效网址上的指定页面

javascript - 如果 props 的数量大于 8,为什么 Node JS 对象创建的性能如此糟糕?

javascript - 如何在 Angular 中访问 XMLHttpRequest

javascript - 删除angularjs中的数据库数据

javascript - 如何使用loopback 4执行post请求

javascript - 使用 JS 迭代数组并对所有值求和