Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I break a promise chain?

Tags:

javascript

How should I stop the promise chain in this case? Execute the code of second then only when the condition in the first then is true.

var p = new Promise((resolve, reject) => {
    setTimeout(function() {
        resolve(1)
    }, 0);
});

p
.then((res) => {
    if(true) {
        return res + 2
    } else {
        // do something and break the chain here ???
    }
})
.then((res) => {
    // executed only when the condition is true
    console.log(res)
})
like image 264
vincentf Avatar asked May 04 '17 00:05

vincentf


1 Answers

You can throw an Error in the else block, then catch it at the end of the promise chain:

var p = new Promise((resolve, reject) => {
    setTimeout(function() {
        resolve(1)
    }, 0);
});

p
.then((res) => {
    if(false) {
        return res + 2
    } else {
        // do something and break the chain here ???
      throw new Error('error');
    }
})
.then((res) => {
    // executed only when the condition is true
    console.log(res)
})
.catch(error => {
  console.log(error.message);
})

Demo - https://jsbin.com/ludoxifobe/edit?js,console

like image 19
Nick Salloum Avatar answered Oct 06 '22 15:10

Nick Salloum