Angular 5 Http Interceptor que actualiza el token JWT

Ya he implementado la lógica de guardar y recuperar tokens y también tengo una llamada refrescante. El problema es que cuando intercepto 403 en mi HttpInterceptor, otras llamadas que se realizan al mismo tiempo, también actualizan el token. Me encantaría retener esas llamadas hasta que se actualice mi token. Para crear lo que yo llamaría un 'semáforo' de solicitudes.

@Injectable()
export class TokenInterceptor implements HttpInterceptor {

private auth: AuthService;

constructor(private injector: Injector) {
}

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    this.auth = this.injector.get(AuthService);

    if(this.auth.isAuthenticated()){
        request = request.clone({
            setHeaders: {
                Accept: 'application/json',
                Authorization: `Bearer ${localStorage.getItem('access_token')}`
            }
        });
    } else {
        request = request.clone({
            setHeaders: {
                Accept: 'application/json'
            }
        });
    }

    return next.handle(request).catch(error => {
        if (error.status === 401) {
            console.log('refreshing token');

            // TODO: return Refresh Token here and hold other calls
        }

        return Observable.throw(error);
    });
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta