typescript - RxJS hent verdier før/etter emisjon av Observable


Jeg vil gjerne beregne en forskjell mellom utslippene til en enkelt Observable.

Finnes det en måte å få både den nåværende og forrige utsendelsen fra en Observable hvis den sender ut en ny verdi? Jeg ønsker noe som dette:

ob$.subscribe(val => {
  console.log(val)
  // First emission: [1,2,3]

  // Second emission: [1,2,3,4]

  console.log(arrayDifference(before, after)) // [4]
})

Hvordan skulle jeg gå fram med det? Må jeg lagre hver emisjon i en variabel på et øvre nivå, eller finnes det en fancy RxJS-måte å gjøre dette på?

Svar #1

Bruk skanneoperatøren for å sjekke den forrige verdien

   const arrayDifference = (before, after) => {
    // Immlement the fuction here
    
    const difference = .........
    return difference
    }
    
    
    ob$.pipe(scan((before,after) => arrayDifference(before,after), [])).subscribe(val =>  console.log(val))

Dette burde fungere

Svar #2

Du kan gjøre det med bufferCount-operatoren som er veldig modulær:

bufferCount(2, 1)

Den vil opprette en ny buffer på størrelse 2 etter hver 1 emisjon fra kilden.

Alternativt finnes det også pairwise()-operatoren som gjør akkurat det samme.

Relaterte artikler