2013-04-24 31 views
0

我们有以下服务:资源的呼叫不可达资源冻结UI

app.factory('myService', function($resource) { 
    return $resource("resources/myServiceUri", {param1: "foo"}, { 
     get: {method: "GET", isArray: true} 
    }); 
}); 

在页面加载我们的应用程序调用这样的服务:

myService.get({},function(result) { 
    model.myServicesModel = result; 
    console.log("if there are network problems the control goes here"); 
}); 

这工作完全在后台运行,并连接没问题。但如果由于某种原因或其他后台服务无法连接到数据库,它使用的资源调用将返回错误代码为500的响应。这仍然可以,但似乎此服务调用会返回大量资源对象,每个资源对象都包含一个字符来自后台服务抛出的异常。如你所见,我们根本没有使用错误回调,但是即使我们做了这个控制,当这个问题发生时,它仍然会成功回调。

有没有很好的方法来处理这个问题?我们能否以某种方式绕过以错误代码500返回的响应?

问题可能会通过创建一个'preresource call'来解决,该'preresource call'只会为这个相同的调用返回http标头,但是有更好的解决方案吗?

回答

0

我不确定它是否是正确的解决方案,但添加一个空的错误回调应该可以解决问题。

myService.get({},function(result) { 
    model.myServicesModel = result; 
    console.log("if there are network problems the control goes here"); 
}, function() { 
    //error 
}); 

使用此回调函数,您的结果将不会分配给您的模型。如果您将参数添加到回调函数中,您还可以知道错误状态和标题,并向用户显示有关错误的有用信息。

+0

添加错误回调在这里没有帮助,因为它不会被调用。此外,类型为GET的资源调用的成功回调默认情况下不会返回状态代码。我确实编辑了angular-resource.js并添加了状态码,但在这种情况下知道它并没有帮助,因为当控件进入成功回调时浏览器已经冻结。 – 2013-04-25 10:21:04

+0

并且问题不是将结果设置为我的模型 - 当错误REST结果被提取时会造成损坏。另外需要注意的是,angularjs似乎将后台服务抛出的异常中的每个字母都视为独立的json结果对象。我认为这个问题应该通过在后台添加更多的catch子句来解决,并返回一个带有错误信息的JSON对象给REST服务 – 2013-04-25 10:48:06