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
, , .