加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读