iJade
iJade

Reputation: 23801

Why JavaScript Promise Catch isn't fired

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

Answers (2)

J. Pichardo
J. Pichardo

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

Update

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

Tareq
Tareq

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

Related Questions