1

非同期呼び出しでタイムスタンプ マーカーEqServiceを知りたいサービス ( ) を持つ Angular アプリがあります。

リクエストとレスポンスのインターセプターを使用しています。主要なコンポーネントは次のとおりです。

// app.js

var appModule = angular.module('myApp', []);

appModule.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push('timestampMarker');
}]);

appModule.controller('PostsAjaxController', function ($scope, EqService) {

    $scope.getData = function (){
        EqService.get().then(function (resp) {
            console.log(resp);
            // Want here 'config.responseTimestamp' and 'config.requestTimestamp';
        });
    };

    $scope.getData();
});

//interceptor.js

appModule.factory('timestampMarker', [function() {
    var timestampMarker = {
        request: function(config) {
            config.requestTimestamp = new Date().getTime();
            return config;
        },
        response: function(response) {
            response.config.responseTimestamp = new Date().getTime();
            return response;
        }
    };
    return timestampMarker;
}]);

// services.js

appModule.factory('EqService', function ($http, $q) {
    return {
        get: function () {
            var deferred = $q.defer();
            $http({ method: 'POST', url: './data.php'}).success(function (data) {
                deferred.resolve(data);
            });
            return deferred.promise;
        }
    }
});

私の質問は次のとおりです: EqService get 呼び出しの後に'config.responseTimestamp' を取得するにはどうすればよいですか?'config.requestTimestamp'

4

2 に答える 2

1

一貫したプロミスthenの代わりに使用する必要があります。実装successを見てsuccess

promise.success = function(fn) {
    // ...
    promise.then(function(response) {
        fn(response.data, response.status, response.headers, config);
    });
    return promise;
};

応答が分割されていることがわかります。services.jsを使用するにはthen、次のようになります。

appModule.factory('EqService', function ($http, $q) {
    return {
        get: function () {
            var deferred = $q.defer();
            $http({ method: 'POST', url: './data.php'}).then(function (response) {
                deferred.resolve(response);
            });
            return deferred.promise;
        }
    }
});
于 2015-12-11T18:11:41.267 に答える
0

応答オブジェクトに含まれる config プロパティを使用します。リクエストを行うために使用される構成が含まれています。https://docs.angularjs.org/api/ng/service/$httpを確認してください。

于 2015-12-11T18:11:26.273 に答える