angularJS中的同步http呼叫

前端之家收集整理的这篇文章主要介绍了angularJS中的同步http呼叫前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下情况,我需要特定网址的数据。我写了一个函数,它接受参数’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);
}

猜你在找的Angularjs相关文章