angularJS中的同步http呼叫
发布时间:2020-12-17 08:11:51 所属栏目:安全 来源:网络整理
导读:我有以下情况,我需要特定网址的数据。我写了一个函数,它接受参数’url’。在函数内部,我有一个$ http.get方法调用url。数据将返回给调用函数 var getData = function (url) { var data = ""; $http.get(url) .success( function(response,status,headers,
我有以下情况,我需要特定网址的数据。我写了一个函数,它接受参数’url’。在函数内部,我有一个$ http.get方法调用url。数据将返回给调用函数
var getData = function (url) { var data = ""; $http.get(url) .success( function(response,status,headers,config) { data = response; }) .error(function(errResp) { console.log("error fetching url"); }); return data; } 问题如下,$ http.get是异步的,在获取响应之前,函数返回。因此,调用函数将数据作为空字符串获取。从url获取数据之前,如何强制函数不返回?
看看承诺克服这些问题,因为它们被用在整个地方,在有角度的世界。
你需要使用$q var getData = function (url) { var data = ""; var deferred = $q.defer(); $http.get(url) .success( function(response,config) { deferred.resolve(response); }) .error(function(errResp) { deferred.reject({ message: "Really bad" }); }); return deferred.promise; } 这是promises and $q的一篇很好的文章 更新: FYI,$ http服务本身返回一个承诺,所以$ q在这种情况下并不是必需的(因此也就是anti-pattern)。 但不要让这是跳过阅读关于$ q和承诺的原因。 所以上面的代码相当于以下代码: var getData = function (url) { var data = ""; return $http.get(url); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |