javascript - 将 $http 服务的响应保存到 angularjs 中的数组中

标签 javascript arrays angularjs callback

以下是代码,它正在控制台响应,但无法将响应设置为存储在 $scope.dateWiseData 数组中。让我知道我做错了什么。

$scope.dateWiseData = [];
var tmpArr = [];
var x = 0;
for (var i=0; i< 7;i++) {
    $http.post('/api/getdata', {_id: currentUser._id, data: data}).then(function(response){
        console.log(response.data);
        tmpArr.push(response);
        if ( x < 7 ) {
            $scope.dateWiseData = tmpArr;
        }
        x++;
    });
}
console.log("--Week Data Array--");
console.log($scope.dateWiseData);

最佳答案

如果您尝试打印 console.log($scope.dateWiseData); 这将在 $scope.dateWiseData 数组分配给 data 之前执行,这意味着这将在从服务器获取数据之前打印。但是您的数据应该在 http 完成后分配给该数组。您需要检查 javascript 中的 promise

$scope.getData() = function(){
    var deferred = $q.defer();
    for (var i=0; i< 7;i++) {
        $http.post('/api/dayavailability', {_id: SessionService.currentUser._id, weekDay: new Date($scope.sevenWeekDayArr[i]).toISOString()}).then(function(response){
            tmpArr = response.data;
            if ( x < 7 ) {
                $scope.dateWiseData.push(tmpArr);
            }
            if(x==6) {
                deferred.resolve();
            }
            x++;
        });
    }
    return deferred.promise;
}

像这样包装 for 循环 和

$scope.getData().then(function() {
   // processing
});

** 不要忘记添加 $q 作为 Controller 中的参数 **

关于javascript - 将 $http 服务的响应保存到 angularjs 中的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26009960/

相关文章:

javascript - 响应式设置会导致页面滚动问题

javascript - 检测数组中的对象是否具有与其他对象相同的属性但不同的其他属性

javascript - 刷新页面后调用 setItem() 时 $windows.localStorage 重置

javascript - 有没有办法隐藏react-navigation-drawer组件的标题标题

c# - 使用 FileReader.readAsDataUrl 上传图片到 Web Api 服务

arrays - 如何为函数的通用数组参数(而不是其 Generator.Element)添加类型约束(协议(protocol)一致性)

arrays - 重新排序用于创建 subview 的数组后,Ember View 未更新

angularjs - 使用 CSS3 动画识别掉帧的原因

javascript - d3、Angular 2 : node. getBoundingClientRect 不是函数

javascript - 在html中动态切换字段集