开发者问题收集

AngularJS 承诺在 foreach 中获取数据

2015-12-29
57

我有一个用于获取数据的承诺:

var activeUsersByZonePromise = function (zone) {
            return $http.get(backendUri.buildAppUri('/active_users/total', {
                'start_day': $scope.timeFilter.startDay(),
                'zone': zone
            })).then(function (data) {
                return {
                    count: data.data.activeUsers.current,
                    sincePreviousTime: data.data.activeUsers.current - data.data.activeUsers.previous,
                    arrow: arrowImage(data.data.activeUsers.current, data.data.activeUsers.previous)
                };
            });
        };

之后我注意到建立一些数据模型,并且我使用 foreach 设置值并获取数据,如下所示:

getZonesPromise.then(function (result) {
            var zones = [];
            angular.forEach(result.qualityScore.zones, function (response) {
                zones.push({
                    zone: response.zone,
                    qualityScore: response.qualityScore,
                    prevQualityScore: response.prevQualityScore
                });
            });
            return zones;
        }).then(function (zones) {
            var data = [];
            angular.forEach(zones, function (zone) {
                data.push({
                    title: zone.zone,
                    activeUsers: activeUsersByZonePromise(zone.zone),
                    //...

      $scope.zonesDataModel = data;
    });

并且 activeUsersByZonePromise(zone.zone) 无法获取数据,因为我使用 ZonesDataModel 进行数据绑定,请帮助我解决这个问题。

1个回答
getZonesPromise.then(function (result) {
            var zones = [];
            angular.forEach(result.qualityScore.zones, function (response) {
                zones.push({
                    zone: response.zone,
                    qualityScore: response.qualityScore,
                    prevQualityScore: response.prevQualityScore
                });
            });
            return zones;
        }).then(function (zones) {
            $scope.zonesDataModel = [];
            angular.forEach(zones, function (zone) {
                activeUsersByZonePromise(zone.zone).then(function(user) {
                    $scope.zonesDataModel.push({
                        title: zone.zone,
                        activeUsers: user,
                    //...
                }
    });

您将承诺 activeUsersByZonesPromise 的结果分配给 activeUsers 。 这种方式似乎更好

Esta
2015-12-29