【发布时间】:2018-11-20 22:57:43
【问题描述】:
在审查 AngularJS 应用程序时,我很震惊,我真的不知道如何在控制器级别处理来自数据库的错误。
我们有一个三层结构controller -> service -> rest
Rest 服务处理对后端数据库的调用并向中间层服务返回一个承诺,中间层服务在大多数情况下将其交给控制器
myController.js
myService.getdata().then(function (result) {
$scope.data = result
})
myService.js
this,getdata = function () {
return RestService.get('url/to/my/data')
}
RestService 愉快地从后端 API(通过 hapi/Boom)返回错误,这些错误可以被 myService 或 myController 捕获。我正在努力的是在服务而不是控制器中构建错误处理程序。
我在Controller中的最佳尝试如下:
.then(function (result) {
$scope.data = result
// do something with the data
})
.catch(function (error) {
console.error('data could not be loaded')
})
.finally(function () {
// tidy up here
})
我宁愿将错误处理移到服务中,但不确定控制器将如何等待数据可用于处理...
【问题讨论】:
-
好吧,除了
$httpProvider中的custom interceptor,您可以尝试只传递两个回调:this.getdata = function (success, error) { return RestService.get('url/to/my/data').then(success, error) -
@AlekseySolovey $http.success 和 $http.error 已在 AngularJS 1.6 中删除,如果这就是您所说的
-
我说的是把你自己的函数作为参数传递。它们将作为可以在服务中执行的回调
标签: angularjs error-handling promise angular-promise