处理已解决/拒绝的两种方式Angular承诺是否相同?
promise.then(function (value) {
console.log('promise resolved with val', value);
return 'resolved';
})
.catch(function (reason) {
console.log('promise rejected with reason', reason);
return 'rejected';
})
promise.then(function (value) {
console.log('promise resolved with val', value);
return 'resolved';
}, function (reason) {
console.log('promise rejected with reason', reason);
return 'rejected';
});
我怀疑的原因是因为我读到then
返回一个新的承诺,所以似乎A在功能上与
var anotherPromise = promise.then(function (value) {
console.log('promise resolved with val', value);
return 'resolved';
});
anotherPromise.catch(function (reason) {
console.log('promise rejected with reason', reason);
return 'rejected';
})
与B看起来不一样,因为catch
正在处理对anotherPromise
而不是promise
的拒绝。
答案 0 :(得分:3)
Promises使用方法链接返回promise的同一个实例,所以即使您在设置的版本中创建新版本的promise也是如此..
var anotherPromise = promise.then(function (value) {
.. promise和anotherPromise都指向同一个对象。
同样适用于:
var a = {};
var b = a;
a.monkey = 'banana';
console.log(b.monkey); // 'banana'
答案 1 :(得分:0)
它们在功能上是等价的,并且都会返回一个承诺。
在有2个回调的示例中,第二个回调将处理错误,但由于您仍在调用.then
,您仍然会得到承诺。
意思是,如果您愿意,甚至可以在技术上做一些奇怪的事情:
promise.then(function (value) {
console.log('promise resolved with val', value);
return 'resolved';
}, function (reason) {
console.log('promise rejected with reason', reason);
return 'rejected';
})
.then(function(eitherValue) {
console.log('eitherValue will be either "rejected" or "resolved"');
});