How to convert an Observable into a BehaviorSubject? How to convert an Observable into a BehaviorSubject? javascript javascript

How to convert an Observable into a BehaviorSubject?


No need to convert it.

Just create a subject and attach observable to it with : obs.subscribe(sub)

example:

var obs = new rxjs.Observable((s) => {setTimeout(()=>{s.next([1])} , 500)}) //observablevar sub = new rxjs.BehaviorSubject([0]) //create subjectobs.subscribe(sub) //<----- HERE ----- attach observable to subjectsetTimeout(() => {sub.next([2, 3])}, 1500) //subject updatedsub.subscribe(a => console.log(a)) //subscribe to subject

Note: obs.subscribe(sub) is equivalent to :

obs.subscribe({  next: v => sub.next(v),  error: v => sub.error(v),  complete: () => sub.complete()})

Run it online


This is how I convert my Observables to BehaviorSubjects:

import { Observable, BehaviorSubject } from 'rxjs';export function convertObservableToBehaviorSubject<T>(observable: Observable<T>, initValue: T): BehaviorSubject<T> {    const subject = new BehaviorSubject(initValue);    observable.subscribe(subject);    return subject;}


I have pretty concerns about the use case too. But here it comes a solution, feel free vote down as long you leave feedback too. Since BehaviourSubject and any other Subject are Observables,

import { BehaviorSubject, from } from 'rxjs'; import { map, mergeMap } from 'rxjs/operators';const source$ = from([1,2,3,4,5,6,7,8,9]);const bs = new BehaviorSubject('start')    .pipe(        mergeMap(() => source$)    );bs.subscribe(console.log);