Я хотел бы позволить клиенту динамически изменять 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;
}
};
}
Если есть какие-либо другие способы сделать это, я весь слух! Спасибо!