This question already has answers here:
How do I return the response from an asynchronous call?
(36个答案)
2年前关闭。
由于某些原因,下面的代码会产生意外的行为。
显示“ 0”,而不是预期的“ 10”。
显示一个包含10个元素且长度为10的数组。
显示“未定义”。
我是javascript新手。这是angularJS控制器的一部分。 response.data.count是在另一个服务文件上处理的django API响应的整数部分。
任何帮助,将不胜感激谢谢。
(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