[英]Angular $http call to synchronous
angular.module('sample').factory('Service',
function( $rootScope, $http, $location )
{
return {
loadInfo: function()
{
var _url = 'url';
$http.get( _url )
.success( function( data )
{
console.log(data);
})
.error( function( response )
{
error( response );
});
},
});
我不能在没有得到这个结果的情况下调用任何其他服务,但是由于它在弱网络中是异步的,因此它有时间加载该结果并最终导致错误。 我如何才能使此呼叫同步。 想法是其他所有服务都应等到加载后再进行。 在jquery ajax中,我们可以很容易地设置true或false。但是我无法以角度进行设置,我还引用了其他一些答案,但似乎没有任何效果。
请建议
您可以利用有角度的承诺。 $ q服务上的文档
angular.module('sample').factory('Service',
['$rootScope','$http','$location','$q',function( $rootScope, $http, $location,$q )
{
return {
loadInfo: function()
{
var _url = 'url';
var deferred = $q.defer();
$http.get( _url )
.success( function( data )
{
deferred.resolve(data);
console.log(data);
})
.error( function( response )
{
deferred.reject(data);
error( response );
});
},
});
在您的Controller中,它将如下所示:
Service.loadInfo.then(
function(data){
//Whatever you want to do with the data on success
}
,function(data){
//Whatever you want to do on error
}
);
编辑 ,
我添加了$ q服务以及一些解决方法和延迟。 请检查更新后的答案。
如果您可以向我们提供更多代码,那将非常有帮助
您在代码中犯了一个非常简单的错误
angular.module('sample').factory('Service',
function( $rootScope, $http, $location,$q )
{
return {
loadInfo: function()
{
var _url = 'url';
var deferred = $q.defer();
return $http.get( _url )
.success( function( data )
{
console.log(data);
deferred.resolve(data);
})
.error( function( response )
{
error( response );
deferred.reject(response);
});
},
});
编辑为了访问'then',您需要返回一个诺言,该诺言是我使用$ q.defer()创建的,并返回deferred.resolve()。
Cannot read property 'then' of undefined
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.