This question already has answers here:
How do I return the response from an asynchronous call?
                                
                                    (36个答案)
                                
                        
                                2年前关闭。
            
                    
由于某些原因,下面的代码会产生意外的行为。

console.log(chartIntervals.length);


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

console.log(chartIntervals);


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

console.log(chartIntervals[3]);


显示“未定义”。

我是javascript新手。这是angularJS控制器的一部分。 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;
            }

最佳答案

.then所示,chartIntervals是异步填充的。在您console.log它的时候,请求只是刚刚发出-他们还没有回来,所以chartIntervals仍然只是一个空数组,因此它的长度为0,任何chartIntervals[n]n为未定义。

如果要让代码在继续之前填充阵列,请使用Promise.all

09-25 11:31