我过去曾遇到$http
服务问题,我通过创建服务来解决我的请求(对于那些感兴趣的人,这里是帮助我的答案的链接,编辑部分:creating a service for $http request)。
现在的问题是,此解决方案似乎无法处理更大的$http
请求。在前一个中,我只将请求返回的单词分配给$scope
值。现在,返回的是JSON格式的整个配置(我也希望存储在$scope
中)。
我理解promises的概念,$http
返回的值在响应到来之前是一个空字符串,这可能需要一些时间。但在这里,配置不是那么长,我似乎从来没有得到答案;我显示了在视图上收到值的变量,并且在调用函数时它不会改变。
以下是代码:
...
<div>
{{loadedConfig}}
</div>
<button ng-click="loadconfig()">load</button>
app.controller('ConfigurationCtrl', function ($scope, $rootScope, configloader) {
...
$scope.loadedConfig = 'noconfig'
$scope.loadconfig = function() {
configloader.load().then(function (response) {
$scope.loadedConfig = response.data;
});
};
angular
.module('app')
.factory('configloader', configloaderFactory);
function configloaderFactory($http) {
var service = {
load: load
}
return service;
function load() {
return $http.get('url/config');
}
}
如果我拨打较小的加权请求&#39;,则无问题。我也尝试了其他方法来进行此调用,但在每种情况下它都没有工作...(使用$q.deferred
,使用success()/ error()或使用自定义sleep()
函数)
当我收到回复时,then
中的代码是否应该执行? (我认为是,但它永远不会。)
由于
答案 0 :(得分:1)
尝试在工厂中返回promise
,例如:
function load() {
var promise = $http.get('url/config').then(function(response){
return response.data;
}, function(err){
//error
return err;
});
return promise;
}
答案 1 :(得分:0)
尝试:
angular
.module('app')
.factory('configloader', configloaderFactory);
function configloaderFactory($http) {
var service = {
load: load
}
return service;
function load() {
return $http.get('url/config')
.then(requestSuccessful)
.catch(requestFailed)
}
function requestSuccessful(response) {
return response.data;
}
function requestFailed(error) {
console.log('Fail', error.data)
}
}
答案 2 :(得分:0)
由于这与长(较大)请求有关,请考虑更改代码并使用超时:
xls