Skip to content
Conditional promise catch handler
JavaScript TypeScript
Branch: master
Clone or download
Latest commit d7ed7eb Apr 4, 2019

p-catch-if Build Status

Conditional promise catch handler

Useful for handling only some types of errors and let the rest pass through.


$ npm install p-catch-if


const pCatchIf = require('p-catch-if');

// Error constructor
getData().catch(pCatchIf(TimeoutError, () => retry(getData)));

// Multiple error constructors
getData().catch(pCatchIf([NetworkError, TimeoutError], () => retry(getData)));

// Boolean
getData().catch(pCatchIf(isProduction, error => recordError(error)));

// Function
const hasUnicornMessage = error => error.message.includes('unicorn');
getData().catch(pCatchIf(hasUnicornMessage, console.error));

// Promise-returning function
const handler = error => sendError(error).then(checkResults);
getData().catch(pCatchIf(handler, console.error));

// Can also be nested
const validateMessage = error => error.message === 'Too many rainbows';
getData().catch(pCatchIf(UnicornError, pCatchIf(validateMessage, console.error)));


pCatchIf(predicate, catchHandler)

Returns a thunk that returns a Promise.


Type: Error.constructor Error.constructor[] boolean Function -> Promise<boolean>|boolean

Specify either an error constructor, array of error constructors, boolean, or function that returns a promise for a boolean or a boolean.

If the function returns a promise, it's awaited.


Type: Function

Called if predicate passes.

This is what you would normally pass to .catch().


  • p-if - Conditional promise chains
  • p-tap - Tap into a promise chain without affecting its value or state
  • p-log - Log the value/error of a promise
  • More…


MIT © Sindre Sorhus

You can’t perform that action at this time.