RxJS webSocket Динамический URL - PullRequest
1 голос
/ 29 октября 2019

Я хотел бы позволить клиенту динамически изменять URL-адрес на webSocket и поддерживать Observables при подключении к новому webSocket. Глядя на RxJS Github и Stackoverflow, это не то, что поддерживается RxJS (см. https://github.com/ReactiveX/rxjs/issues/4355)

Ссылочная Github ссылается на Stackoverflow ( Сброс ReplaySubject в RxJS 6 ), гдеresettable используется для «сброса» субъекта.

Может ли это использоваться для динамического изменения URL-адреса webSocket?

https://github.com/cartant/rxjs-etc/blob/master/source/observable/resettable.ts

Вот чтоЯ уже пробовал:

function resettable<T, U extends any[]>(
  factory: (...args: U) => WebSocketSubject<T>,
  ...args: U
): {
  readonly closed: boolean;
  readonly observable: Observable<T>;
  readonly subject: Subject<T>;
  reset(...args: U): void;
  unsubscribe(): void;
} {
  const resetter = new Subject<any>();
  const source = new Subject<T>();
  let destination = factory(...args);
  let subscription = source.subscribe(destination);
  return {
    reset(...args: U): void {
      subscription.unsubscribe();
      destination = factory(...args);
      subscription = source.subscribe(destination);
      resetter.next();
    },
    unsubscribe(): void {
      subscription.unsubscribe();
      /*tslint:disable:rxjs-no-subject-unsubscribe*/
      source.unsubscribe();
      /*tslint:enable:rxjs-no-subject-unsubscribe*/
    },
    get closed(): boolean {
      return subscription.closed;
    },
    get observable(): Observable<T> {
      return resetter.asObservable().pipe(
        startWith(null),
        switchMap(() => destination)
      );
    },
    get subject(): Subject<T> {
      return source;
    }
  };
}

Если есть какие-либо другие способы сделать это, я весь слух! Спасибо!

...