Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular.js中,我如何在自己定义的服务上获得拦截器的响应?_Javascript_Angularjs_Angular Http_Angular Http Interceptors - Fatal编程技术网

Javascript 在Angular.js中,我如何在自己定义的服务上获得拦截器的响应?

Javascript 在Angular.js中,我如何在自己定义的服务上获得拦截器的响应?,javascript,angularjs,angular-http,angular-http-interceptors,Javascript,Angularjs,Angular Http,Angular Http Interceptors,我有一个带有服务(EqService)的Angular应用程序,我想知道异步调用中的时间戳标记 我正在使用请求和响应拦截器。关键部件如下所示: //app.js var appModule = angular.module('myApp', []); appModule.config(['$httpProvider', function($httpProvider) { $httpProvider.interceptors.push('timestampMarker'); }]);

我有一个带有服务(
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();
});
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;
}]);
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;
        }
    }
});
//interceptor.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();
});
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;
}]);
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;
        }
    }
});
//services.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();
});
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;
}]);
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'
使用响应对象中的config属性。它包含用于发出请求的配置。
检查。

您应该使用
然后
而不是
成功
来获得一致的本票。查看
成功
实施

promise.success = function(fn) {
    // ...
    promise.then(function(response) {
        fn(response.data, response.status, response.headers, config);
    });
    return promise;
};
我们看到反应被打破了。要使用
,您的services.js将如下所示:

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;
        }
    }
});

我怎样才能在app.js的
EqService.get()中获取值,然后(function(resp){//values here})???应该是
相应的时间戳
对不起,但不起作用。请记住,
resp
来自
EqService
。而
resp
仅打印数据。只需注意您在eq服务中使用了
success
。编辑了我的回答对不起,但现在我有点迷路了。您发布了两个代码示例,我必须使用哪一个?你能不能,根据我的理解修改一下我的代码。我是说,services.js的整个代码怎么可能?