Skip to content

Instantly share code, notes, and snippets.

@r3dm1ke
Last active April 19, 2020 15:31
Show Gist options
  • Select an option

  • Save r3dm1ke/c625b66f72091b0752b82461ec2c61e2 to your computer and use it in GitHub Desktop.

Select an option

Save r3dm1ke/c625b66f72091b0752b82461ec2c61e2 to your computer and use it in GitHub Desktop.
Interceptor middleware with Promises support
const createInterceptorMiddleware = (interceptors) => (store) => (next) => (action) => {
Promise.all(
interceptors
.filter(interceptor => interceptor.type === action.type)
.map(interceptor => {
const result = interceptor.handler(action, store.dispatch, store.getState);
return result instanceof Promise ? result : Promise.resolve(result);
})
)
.then(() => next(action))
.catch(e => console.error(e));
}
const interceptors = [
{type: 'INCREMENT', handler: () => doSomeApiStuff()},
{type: 'DECREMENT', handler: () => doOtherApiStuff()}
];
const middleware = createInterceptorMiddleware(interceptors);
@Constantiner
Copy link
Copy Markdown

In this snippet the line:

return result instanceof Promise ? result : Promise.resolve(result);

in context of Promise.all is equivalent to:

return result;

Try this:

const getDelayedPromisedValue = value => new Promise((resolve, reject) => {
  setTimeout(() => resolve(value), 1000);
});

const getImmediatePromisedValue = value => Promise.resolve(value);

const getValue = value => value;

Promise.all([getDelayedPromisedValue(10), getImmediatePromisedValue(5), getValue(1)]).then(values => console.log(values));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment