AngularJS - 等待来自服务器的响应

时间:2015-09-16 18:27:47

标签: javascript angularjs

我正在使用AngularJS构建一个与ASP.NET Web Api服务器通信的应用程序。

在角度客户端中,我有几个通过$ http核心服务与服务器通信的服务。

问题在于我无法从http请求中返回实际结果,只能返回一个承诺。

假设我有一个服务从服务器返回一系列票证(我的应用程序的某些资源):

myService.getAll = function () {

    var result = $http.get('/api/tickets').then(function (result) {

        if (result.status !== 200)
            return [];

        return result.data;

    }, function (err) {

        return [];

    }); 

};

如果我想从服务而不是承诺中显式返回结果数据(或失败时为空数组),我该怎么办?

有没有办法在Angular中等待响应?

谢谢, 阿里克

2 个答案:

答案 0 :(得分:4)

不,你要求的角度是不可能的。

如果您使用myService.getAll = function () { return $http.get('/api/tickets').then(function (result) { if (result.status !== 200) return []; return result.data; }, function (err) { return []; }); }; 对象,可以使用此功能,但是,我强烈建议不要使用它,因为它会对您的应用程序产生负面影响。

是的,它可能使您更容易理解和编写代码,但是,它会在浏览器锁定时对您的最终用户产生负面影响,等待"等待"用于完成同步请求。用户将无法在浏览器中执行任何操作,包括更改为其他选项卡,输入输入,单击按钮,甚至GIF动画也不会生成动画。 css动画不会运行等等。对于最终用户,您的应用程序将在请求完成之前看起来已损坏。

最重要的是,在现代浏览器中已经弃用了同步ajax请求,因此很可能它们会在几年内(如果不是更快)完全消失,这意味着你&#39 ; ll要么必须更新您的应用程序以便稍后使用异步请求,要么不支持不支持同步请求的浏览器。

最好的选择是接受承诺。

.Any()

答案 1 :(得分:-2)

没有办法等待响应,但你必须通过实现回调函数将数据传递给控制器​​,例如你的服务看起来像

    myService.getAll = function (callback) {

    var result = $http.get('/api/tickets').then(function (result) {

        if (result.status !== 200)
            return [];
       if(typeof(callback)=="function")
         {
           callback(result.data)
         }


    }, function (err) {

        return [];

    }); 

};