我正在使用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中等待响应?
谢谢, 阿里克
答案 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 [];
});
};