Javascript $http在承诺中传播错误
因此,在本文中,我演示了一个失败的Javascript $http在承诺中传播错误,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,因此,在本文中,我演示了一个失败的$http请求 服务的职责是解构服务器响应,并准备好供控制器使用的信息 当它出错时,我觉得我需要将错误传播到控制器,不是为了处理,而是为了能够通知用户操作无法完成。(在日志记录等方面的处理) 目前的情况是: return $http.get('notgoing') .then( function success(result) { return result.data; }, function error(err) {
$http
请求
服务的职责是解构服务器响应,并准备好供控制器使用的信息
当它出错时,我觉得我需要将错误传播到控制器,不是为了处理,而是为了能够通知用户操作无法完成。(在日志记录等方面的处理)
目前的情况是:
return $http.get('notgoing')
.then(
function success(result) {
return result.data;
},
function error(err) {
console.warn(err); // do something meaningful with the error
return err;
}
);
这将把错误或成功汇总到链式承诺的成功函数中。这不适合通知用户
有没有一种简单的方法可以让error函数将值冒泡为下一个chained promise的error函数的错误。(请记住,我真的不想依赖$q
库,而让另一个承诺与$http
承诺交织在一起)
-或-
处理该错误的责任是否在服务中停止。而不是
返回错误
,使用throw err抛出它代码>$q
将处理“未捕获”错误并拒绝该链。我认为没有办法不使用$q
,但是Angular自带了它自己的实现,所以您需要做的就是将它注入到您的服务中,然后调用$q.reject(err)
。否则,Angular会认为您的错误已经在服务内部得到处理
angular.module('test', []).factory('testService', function ($http, $q) {
...
function test() {
return $http.get('notgoing').then(function success(result) {
return result.data;
}, function error(err) {
console.warn(err);
return $q.reject(err);
});
}
});
检查更新的。Genius。。。。我原以为这会导致整个应用程序崩溃。但这很公平!你能提供一些解释或仅仅是另一个链接:)@shryas公平的说,如果你把它扔到plnkr中,有足够的解释吗?谢谢,但我想知道它在打电话时会有什么不同,根据我的理解,它会称错误为错误的一部分。那么,除了成功之外,我说过我想避免这种模式。我知道。我知道,但我认为没有其他方法(这是不正确的)。我可以问一下为什么您希望避免使用$q
?只是一个小插件:这解释了使用抛出和拒绝之间的区别。