Warning: RxJS newb here.
Here is my task:
- When triggered by the observable
onUnlink$... - Immediately start recording values from the observed
onAdd$maximum for 1 second (I will call this section onAddBuffer$). - Request a database (creating an
doc$observable) to retrieve the model that we will use to match one of the valuesonAdd$ - If one of the values of the observed value
onAddBuffer$corresponds to the value doc$, do not highlight - If none of the values from the observed value
onAddBuffer$matches the value doc$, or if the observed element onAddBuffer$never emits, emits the valuedoc$
This was my best guess:
const docsToRemove$ = onUnlink$.concatMap( unlinkValue => {
const doc$ = Rx.Observable.fromPromise( db.File.findOne({ unlinkValue }) )
const onAddBuffer$ = onAdd$
.buffer( doc$ )
.takeUntil( Rx.Observable.timer(1000) );
return doc$.switchMap( doc =>
Rx.Observable.race(
onAddBuffer$.single( added => doc.attr === added.attr ).mapTo( Rx.Observable.empty() ),
Rx.Observable.timer( 1000 ).mapTo( doc )
)
);
});
docsToRemove$.subscribe( doc => {
})
EmptyObservable. , , single , undefined, , , , ? find.
single filter, .
FYI: - 1 unlink add, , rename. unlink, , .