तो मेरा कोड है:

combineLatest([obs1, obs2]).subscribe((x => {
  console.log(x)
})

लॉग स्टेटमेंट को निकाल दिया जाना चाहिए जब कोई भी अवलोकन योग्य उत्सर्जन करता है। हालांकि, दस्तावेज़ों में बताए अनुसार एक गोचा है:

CombLatest एक प्रारंभिक मान का उत्सर्जन नहीं करेगा जब तक कि प्रत्येक अवलोकन योग्य कम से कम एक मान का उत्सर्जन न करे

मुझे इसे उत्सर्जित करने की आवश्यकता है, भले ही मूल वेधशालाओं में से एक ने कभी उत्सर्जित न किया हो। यह मैं कैसे करूंगा? कई thx

-1
danday74 8 पद 2020, 18:39

2 जवाब

सबसे बढ़िया उत्तर

प्रत्येक अवलोकन योग्य के साथ विशिष्ट उपयोग शुरू होता है

combineLatest([
   obs1.pipe(startWith(null)),
   obs2.pipe(startWith(null)]
   ).subscribe((x => {
      console.log(x)
   })
2
Eliseo 8 पद 2020, 22:31

इसे कैसे लागू किया जा सकता है, इसका एक सरल उदाहरण नीचे दिया गया है:

// overloading:

function combineLatestAny<O1 extends ObservableInput<any>>(sources: [O1]): Observable<[ObservedValueOf<O1>]>;
function combineLatestAny<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(sources: [O1, O2]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;
function combineLatestAny<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(sources: [O1, O2, O3]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;
function combineLatestAny<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(sources: [O1, O2, O3, O4]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;
function combineLatestAny<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;
function combineLatestAny<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;
function combineLatestAny<O extends ObservableInput<any>>(sources: O[]): Observable<ObservedValueOf<O>[]>;

// implementation:

function combineLatestAny(sources) {
  return new Observable<any>(observer => {
    const subscribtion = new Subscription();
    const values = new Array(sources.length).fill(undefined);
    let active: number = sources.length;

    sources.forEach((source, index) => subscribtion.add(
      source.subscribe({
        next: value => { values[index] = value; observer.next(values) },
        error: error => { observer.error(error); subscribtion.unsubscribe() },
        complete: () => (--active === 0) && observer.complete()
      })
    ))

    return {
      unsubscribe: () => subscribtion.unsubscribe()
    }
  })
}

उपयोग:

combineLatestAny([timer(1000), timer(3000).pipe(mapTo("string")), timer(2000).pipe(mapTo(true))])
  .subscribe(
    {
      next: console.log,
      error: console.error,
      complete: () => console.log("completed")
    }
  )
1
Rafi Henig 8 पद 2020, 22:38