Почему тема отписалась в rxjs? - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь выполнить http-опрос Rxjs (запросить, бездействовать определенное время после получения результата, а затем запросить снова), но все же получил несколько не очень проясненных вопросов, может кто-нибудь помочь объяснить?

Q1: я выдаю значение для загрузки $ из конвейера load $, это хороший способ реализовать стратегию опроса (она работает в текущем режиме, просто не знаю, является ли это лучшей практикой)

Q2: Я понимаю, что когда флажок установлен, pauser $ добавит подписчика для загрузки $, поэтому цикл загрузки $ сработал, но когда флажок снят, pauser просто переключается на пустой поток, это нормально, но почему загрузка $ остановлена?никто не отписался это правильно?(хотя да, в настоящее время это работает как ожидалось, но почему?)

        
        const load$ = new BehaviorSubject('').pipe(
            concatMap(_ => concat(
                from(makePromise()).pipe(tap(v => dispatchEvent(v)), tap(v => log("idle "))),
                of('').pipe(delay(2000)),
                // interval(1000).pipe(take(3), tap(v => log("idle " + v))),
                of('').pipe(tap(_ => load$.next('')), skip(1))
            ))
        );

        pauser$ = fromEvent(document.querySelector("#tick"), "click")
            .pipe(
                pluck("target", "checked"),
                switchMap(checked => checked ? load$ : empty())
            )
            .subscribe(_ => _!="" && console.log(_));

1 Ответ

0 голосов
/ 02 декабря 2018

После того, как проверенный документ https://www.learnrxjs.io/operators/transformation/switchmap.html, очищен для Q2, switchMap автоматически завершит предыдущую внутреннюю наблюдаемую.

...