I am recursively calling a function which returns a Promise, but i am noticing that the next then is called even if i am rejecting  with error. Below is the relevant part of the code.
  const applyFilters = (counter) => {
    return new Promise((resolve, reject) => {
      let filter = filters[counter];
      if(filter) {
        applyStep(filter).then(promiseTimeout(filter.delay), function(err) {
          console.log('reject with error');
          reject(err);
        }).then(function(res) {
          console.log('still executing after reject');
          resolve(applyFilters(++counter).catch(function(err) {
            reject(err);
          }));
        });
      } else {
        resolve(true);
      }
    });
  };
  const applyStep = (step) => {
    if(step.step_type == 'filter') {
      return worksheet.applyFilterAsync(step.name, values, 'replace');
    } else if(step.step_type == 'parameter') {
      return workbook.changeParameterValueAsync(`${step.name}`, value);
    } else {
      return Promise.resolve(true);
    }
  };
I am seeing on console
reject with error
still executing after reject
Is this the expected behaviour, may be I am missing something. Any help in understating this further will be really great. Thanks.
 
    