1

これは私が取り組んでいるコードです。

  appControllers.controller('MyaSellerOrderCtrl', ['$scope', '$rootScope', 'Order', '$http',
        function($scope, $rootScope, Order, $http) {
            $scope.results = [];
            $scope.getData = function() {
                   $http.get('api/orders/business/?user_id=' + $rootScope.user.user_id).success(function(data){
                        for (var i = 0; i < data.length; i++) {
                            $http.get('api/orders/seller/?business_id=' + data[i].business_id).success(function(data1){
                                 // console.log(data1);        
                                 $scope.results[i] = data1;
                           });
                         }
                         console.log($scope.results);
                    });
             };
             $scope.getData();
         }]);

問題は、関数が正常に動作しているのに $scope.results が空であることです。$http の非同期性が原因であると言う人もいます。エラーを回避するために promise を使用するようにコードを変更できますか?

今、私は示されているようにコードを更新しました

appControllers.controller('MyaSellerOrderCtrl', ['$scope', '$rootScope', '$http','$q',
    function($scope, $rootScope, $http, $q) {

        $scope.results = [];

        function _getOrdersById(id) {
            return $http.get('api/orders/business/?user_id=' + id);
        }

        function _parseOrders(orders) {
            var _promises = [];

            orders.forEach(function (order, index) {
                var _promise = $http.get('api/orders/seller/?business_id=' + order.business_id).then(function (response) {
                    $scope.results[index] = response;
                });

                _promises.push(_promise);
            });

            return $q.all(_promises);
        }

        $scope.getData = function () {
            _getOrdersById($rootScope.user.user_id)
                .then(_parseOrders)
                .then(function () {
                    console.log($scope.results);
                }, function (error) {
                    console.error(error);
                });
        };


        $scope.getData();

    }
]);

しかし、それでもエラーが表示されます

コンソール出力

ラインへの159ラインポイント

orders.forEach(function(order,index) {  
4

3 に答える 3