$q.reject和处理AngularJS链接承诺中的错误
$q.reject and handling errors in AngularJS chained promises
我很难理解链接承诺错误处理的基本概念。为了学习规则,我写了一个简单的例子,猜测结果会是什么。但不幸的是,它的行为并不像我想象的那样。我已经读了很多关于这个主题的文章,但也许因为我的英语不好,我不能了解细节。
不管怎样,这是我的代码:
var promiseStart = $q.when("start");
var promise1 = promiseStart.then(function() {
return Serviceforpromise1.get();
});
var promise2 = promise1.then(function(data1)
{
return Serviceforpromise2.get(data1);
},function(error)
{
return $q.reject();
});
var promiseend = promise2.then(function(data2)
{
return data2;
},function(error)
{
return error;
});
return promiseend;
我知道它可以更好地编码,但这只是为了目的。以下是Serviceforpromise1函数的代码:
function Serviceforpromise1()
{
...
return $http.get(*whatever*).then(function (data){
return data;
},function(error)
{
return $q.reject();
});
}
只考虑Serviceforpromise1失败的情况。$q.rejectet被发送回主链,所以我正在等待调用"promise1.then("的错误回调,它按预期工作。我决定将错误转移到"promise2.then)",所以在这个错误回调中,我添加了return$q.request()行;但它从未到达第二个错误回调("promise2.then"一个),我不明白为什么(就像Serviceforpromise1一样,我返回了一个被拒绝的promise!)
我很乐意深入了解这里正在发生的事情。谢谢你的帮助。
您的理解是正确的,问题似乎在于您试图观察这种行为的方式(您没有向我们展示的内容)。
如果您从返回一个被拒绝的promise,是then()
中的成功或错误处理程序,那么then()
返回的promise将解析为被拒绝的promise。观察:
angular.module('app', [])
.controller('C', [
'$q',
function ($q) {
var promiseStart = $q.when("start");
var promise1 = promiseStart.then(function (value) {
console.log('Got a value:', value);
return $q.reject('Error!');
});
var promise2 = promise1.then(function (data1) {
return "Got some stuff";
}, function (error) {
console.log("Caught an error:", error);
return $q.reject('New error');
});
var promiseend = promise2.then(function (data2) {
return data2;
}, function (error) {
console.log('Caught an error:', error); // <-- this is logged to the console
return error;
});
return promiseend;
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
<div ng-app='app' ng-controller='C'></div>
这里需要注意的一点是,在最后一个处理程序中,返回error
变量,而不是抛出异常或返回被拒绝的promise。因此,在这种情况下,promiseend
将使用该error
变量的值成功地解析。
相关文章:
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 承诺-如何正确地将错误附加到此示例
- 我能处理来自gap.client.load'的错误吗;的承诺
- $q.reject和处理AngularJS链接承诺中的错误
- 如何在使用替代承诺时解释 ajax 调用中的错误
- 处理角度.js承诺错误状态
- 为什么承诺会捕获语法错误
- Chai正如承诺:当承诺抛出错误时,处理错误
- 如何创建角度承诺中捕获的错误
- JS bluebird承诺错误没有给出任何细节
- 蓝鸟(或其他承诺库)保持承诺错误堆栈跟踪
- 异常捕获在功能上是否与承诺错误回调相同
- 如何在加载文件后将承诺错误传播到更高的承诺级别
- ES6承诺错误处理
- 多个承诺错误(承诺必须通过new构造)
- Nodejs承诺错误的使用
- 承诺错误/异常处理设计
- 处理链条中的承诺错误,是不是太急切了
- AngularJS - Firebase -承诺错误
- 如何正确处理请求-承诺错误