I've set up an epic that waits for another epic to complete, much like @jayphelps' answer here: Invoking epics from within other epics
However I've found that it only seems to run once. After that I can see the CART_CONFIG_READY action in the console but the DO_THE_NEXT_THING action is not triggered.
I've tried various combinations of mergeMap and switchMap, with and without take but nothing seems to help.
This is (kind of) what my code looks like.
import { NgRedux } from '@angular-redux/store';
import { Observable } from 'rxjs/Observable';
import { ActionsObservable } from 'redux-observable';
export class CartEpicsService {
checkCart = (action$: ActionsObservable<any>, store: NgRedux<any>) => {
    return action$.ofType('CHECK_CART')
        .switchMap(() => {
            console.log('___LISTENING___');
            return action$.ofType('CART_CONFIG_READY')
                .take(1) // removing this doesn't help
                .mergeMap(() => {
                    console.log('___RECEIVED___');
                    // do stuff here
                    return Observable.of({
                        type: 'DO_THE_NEXT_THING'
                    });
                })
                .startWith({
                    type: 'GET_CART_CONFIG'
                });
        });
}
getCartConfig = (action$: ActionsObservable<any>, store: NgRedux<any>) => {
    return action$.ofType('GET_CART_CONFIG')
        .switchMap(() => {
            const config = store.getState().config;
            // we already have the config
            if (config) {
                return Observable.of({
                    type: 'CART_CONFIG_READY'
                });
            }
            // otherwise load it from the server using out HTTP service
            return this.http.get('/cart/config')
                .switchMap((response) => {
                    return Observable.concat(
                        Observable.of({
                            type: 'CART_CONFIG_SUCCESS'
                        }),
                        Observable.of({
                            type: 'CART_CONFIG_READY'
                        })
                    );
                })
                .catch(error => Observable.of({
                    type: 'CART_CONFIG_ERROR',
                    error
                }));
        });
    }
}
For context I need the response from the /cart/config endpoint to check the validity of the cart. I only need to download the config once.
Here is a runnable example on JS Bin: