Angular 2 chained Promise and passing on reject

2019-05-24 19:27发布

问题:

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";
})