我创建了一个小示例来学习如何处理带有承诺的异常,特别是我所使用的MVC结构。该结构除了使用3个已知组件M模型、V视图和C控制器之外,还使用了一个Data a access Object (DAO),以使其更加独立于后端更改。由于DAO中的转换,您可以使用不同的方法从后端检索数据。但我想这对你们来说一点也不新鲜。
好吧,我想知道的是:如果在MovieInfoService
发生异常,代码跳转到getMovieFailed
方法并返回$q.reject(e)
。但接下来会发生什么呢?DAO是否接收到什么?它是如何被处理的?
我对angular中错误和异常处理的概念很不熟悉。所以我不知道如何用承诺来处理这样的问题。你们能帮助我,给我一些有用的提示,提示或建议如何处理这些问题,以便在用户的视图上显示这些问题,以通知他吗?实际上,即使是alert()
将是足够的- 我只需要了解处理异常的承诺的基本思想/概念。
下面是我的一些示例代码:
app.controller('MainController', ['$scope', 'MovieInfoDAO', function ($scope, MovieInfoDAO)
{
var vm = this;
vm.movie = {};
MovieInfoDAO.getMovie()
.then(function(data){
vm.movie = data;
});
activate();
//////////
function activate() {
return getMovieDetails().then(function(){
console.log('Starting Movie Search');
});
}
function getMovieDetails() {
return MovieInfoDAO.getMovie().then(function(data) {
vm.movie = data;
return vm.movie;
}
}
}]);
app.service("MovieInfoDAO", ['$q', 'MovieInfoService', function($q, MovieInfoService)
{
this.getMovie = function()
{
return MovieInfoService.getMovie().then(function(returnData){
var arrInfoItems = [];
for(var i = 0, length = returnData.length; i < length; i++){
var item = new MovieInfoModel(returnData[i]);
arrInfoItems.push(item);
}
return arrInfoItems;
});
};
}]);
app.service('MovieInfoService', ['$http', '$q', function($http, $q) {
this.getMovie = function()
{
return $http({
method: "GET",
data: { },
url: "http://www.omdbapi.com/?t=Interstellar&y=&plot=short&r=json"
})
.then(getMovieCompleted);
.catch(getMovieFailed);
};
function getMovieCompleted(response) {
return response.data;
}
function getMovieFailed(e) {
var newMessage = 'Failed to retrieve Infos from the Server';
if (e.data $$ e.data.description) {
newMessage = newMessage + 'n' + e.data.description;
}
e.data.description = newMessage;
return $q.reject(e);
}
return this;
}]);
function MovieInfoModel(arrParameter){
Model.call(this);
this.title = arrParameter.Title;
this.actors = arrParameter.Actors;
this.plot = arrParameter.Plot;
this.constructor(arrParameter);
}