问题
Should be a simple question, however I can find no documentation on how to do it.
Chaining a promise like this:
// Making a promise, no problem
let promise = new Promise((resolve, reject) => {
let data = {}; // do something
reject(data);
});
// First chain, no problem
promise.then(data => {
console.log('Success callback', data); // This will not be called
}).catch(err => {
console.log('Error callback', err); // This WILL be called
})
// Second chain, acts as resolved
.then(data => {
console.log('Level 2 success', data); // This WILL be called
}).catch(err => {
console.log('Level 2 error', err); // This will NOT be called
});
I understand that unless I pass on the rejection from the first catch
callback, then subsequent then
's will be handled as resolved.
So... how to call reject from within the catch function?
回答1:
See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch
You need to throw an exception in the catch handler for example to reject the second chain.
// First chain, no problem
promise.then(data => {
console.log('Success callback', data); // This will not be called
}).catch(err => {
console.log('Error callback', err); // This will NOT be called
throw "zonk";
})
来源:https://stackoverflow.com/questions/41594959/angular-2-chained-promise-and-passing-on-reject