Наблюдаемый поток, который будет излучать значение дважды - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть ситуация, когда мне нужно, чтобы наблюдаемое излучало два значения.Первое значение должно быть отправлено немедленно, и все подписчики должны получить значение немедленно.Второе значение может занять некоторое время, но все подписчики также должны получить это значение.

В настоящее время я достигаю этого, делая следующее:

import {Observable} from 'rxjs';
import {tap, startWith} from 'rxjs/operators';

@Injectable()
export class CacheInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler) {
        const cachedResponse = cache.get(req);
        const results$ = sendRequest(req, next);
        return cachedResponse ? results$.pipe(startWith(cachedResponse)) : results$;
    }
}

function sendRequest(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
        tap(event => {
            if (event instanceof HttpResponse) {
                cache.put(req, event);
            }
        })
    );
}

export class HttpCache {
    cache = new Map();

    get(req: HttpRequest<any>): HttpResponse<any> | undefined {
        // ...
    }

    put(req: HttpRequest<any>, response: HttpResponse<any>): void {
        // ...
    }
}

const cache: HttpCache = new HttpCache();

Как видите, я пытаюсь сделать results$.pipe(startWith(cachedResponse)).

Похоже, что происходит то, что я всегда получаю значение results$, а значение cachedResponse никогда не излучается.Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...