Reputation: 23801
Here is a JavaScript code with two promises chained. I was wondering why the catch block isn't hit on running the code.
function getPromiseResolve(){
return new Promise(function(resolve, reject){
resolve('promise resolved')
})
}
function getPromiseRejected(){
return new Promise(function(resolve, reject){
reject('promise rejected')
})
}
getPromiseResolve()
.then(function(res){
getPromiseRejected()
})
.then(function(res){
console.log('response is ', res);
})
.catch(function(error){
console.log('error is ', error);
})
Upvotes: 0
Views: 63
Reputation: 3115
You must return the Promise.reject
for the catch
to handle it.
From MDN:
The Promise.reject(reason) method returns a Promise object that is rejected with the given reason.
Promise.resolve('good')
.then(function(res){
return Promise.reject('bad')
})
.catch(function(error){
console.log('error is ', error);
})
function getPromiseResolve(){
return new Promise(function(resolve, reject){
resolve('promise resolved')
})
}
function getPromiseRejected(){
return new Promise(function(resolve, reject){
reject('promise rejected')
})
}
getPromiseResolve()
.then(function(res){
return getPromiseRejected() // LOOK HERE
})
.then(function(res){
console.log('response is ', res);
})
.catch(function(error){
console.log('error is ', error);
})
Upvotes: 2
Reputation: 5363
Promise.resolve('good')
.then(function(res){
return Promise.reject('bad')
})
.catch(function(error){
console.log('error is ', error);
})
// OR
Promise.resolve('good')
.then(function(res){
throw new Error('bad')
})
.catch(function(error){
console.log('error is ', error.message);
})
Upvotes: -1