我正在使用angular-ui-states,在点击模板之前,我必须解决一些HTTP请求。我目前的问题是准确承诺。
状态反应的例子:
resolve: {
prepareData: function($q, setupService, $stateParams) {
console.log('resolving');
var deferred = $q.defer();
setupService.fetchData($stateParams).then(function(response) {
console.log('back, ', response);
deferred.resolve();
return deferred.promise;
});
}
}
在我的工厂:
services.factory('setupService', [ '...', '$q', function(..., $q) {
return {
fetchData: function(urlParams) {
console.log('starting to validade');
oneService.httpfunction().then(function (response) {
if (response.status == 200) {
// do some non http stuff
// call another factory which makes a http request
anotherservice.anotherfunction().then(function (data) {
if (etc) {
return data;
} else if(etc) {
return data;
}
});
}
});
}
};
}]);
我的状态正确等待服务完成,但最后我不会回到状态解析(我永远不打印('回',响应)),基本上setupService.fetchData()没有得到价值回来了。我在工厂里也错过了$ q吗?对不起,我对$ q的了解并不大。感谢您的支持
更新
弄清楚出了什么问题。通过添加$ q.defer();在我的fetchData服务上,一切正常。因此,而不是return data
,deferred.resolve(data)
,然后返回承诺。感谢您的支持
答案 0 :(得分:0)
您必须在deferred.promise;
功能后返回setupService.fetchData()
。
您的解决方案为空传递响应作为解决该问题的参数
deferred.resolve(response); //resolve response
州决心
resolve: {
prepareData: function($q, setupService, $stateParams) {
console.log('resolving');
var deferred = $q.defer();
setupService.fetchData($stateParams).then(function(response) {
console.log('back, ', response);
deferred.resolve(response); // resolve response.
});
return deferred.promise; // return resolved promise...
}
}
答案 1 :(得分:0)
弄清楚出了什么问题。通过添加$ q.defer();在我的fetchData服务上,一切正常。因此,不是返回数据,而是deferred.resolve(data),然后返回promise。感谢您的支持