gpt4 book ai didi

javascript - 将 promise 的结果插入数组

转载 作者:行者123 更新时间:2023-11-30 06:50:45 25 4
gpt4 key购买 nike

我正在尝试清空数组,然后用 promise 返回的值重新填充一个数组。然而,当我这样做时,它并不总是以相同的顺序将它们添加回去。

$scope.$watch ('timeRange', function (newValue, oldValue, scope){
$scope.chartdata = []
//If a filter has changed, redraw all charts
if (newValue !== oldValue)
{
for(var i = 0; i< $scope.charts.length; i++){
$scope.draw($scope.charts[i]).then(function(value){
$scope.chartdata.push(value);
});
}
}
}, true);

这是用 ng-repeat 显示的。

最佳答案

由于您正在异步执行操作,因此可能无法保证解析顺序。您可以使用索引 i 而不是 push

$scope.$watch ('timeRange', function (newValue, oldValue, scope){
$scope.chartdata = []
//If a filter has changed, redraw all charts
if (newValue !== oldValue)
{
for(var i = 0; i< $scope.charts.length; i++){
$scope.draw($scope.charts[i]).then(function(i) { // create scope to capture i
return function(value) { $scope.chartdata[i] = value; };
}(i));
}
}
}, true);

UPD 添加的示例只是为了演示@georgeawg 作用域的工作原理

var arr = [1, 2, 3];

for (var i = 0; i < arr.length; i++) {
setTimeout(function(i) {
return function() {
console.log(`Let's teach @georgeawg scopes ${i}`)
}
}(i), i * 1000)
}

或者使用forEach

$scope.$watch ('timeRange', function (newValue, oldValue, scope){
$scope.chartdata = []
//If a filter has changed, redraw all charts
if (newValue !== oldValue)
{
$scope.charts.forEach(function(chart, i) {
$scope.draw(chart).then(function(value) {
$scope.chartdata[i] = value;
})
})
}
}, true);

或者使用 Promise.all 或其 angularjs 模拟 $q.all 一次添加所有内容。

$scope.$watch ('timeRange', function (newValue, oldValue, scope){
$scope.chartdata = []
//If a filter has changed, redraw all charts
if (newValue !== oldValue)
{
$q.all($scope.charts.map(function(chart) {
return $scope.draw(chart)
}).then(function(chartdata) {
$scope.chartdata = chartdata;
})
}
}, true);

关于javascript - 将 promise 的结果插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com