Я думаю, вы можете использовать fromEventPattern
:
let something;
const src$ = fromEventPattern(
handler => (something = createSomething({ onSomethingHappened: handler })),
);
src$.pipe(
throttleTime(300),
map(args => myCallback(args))
);
Примечание: предполагается, что myCallback
является синхронной операцией.
Первый аргумент, переданный в fromEventPattern
, - это addHandler
. Он также может иметь removeHandler
, куда вы можете поместить свой лог разборки c (например: освобождение из памяти, обнуление значений и т. Д. c).
Чтобы получить лучшее понимание того, что такое handler
и почему он там используется, давайте посмотрим, как реализован fromEventPattern
:
return new Observable<T | T[]>(subscriber => {
const handler = (...e: T[]) => subscriber.next(e.length === 1 ? e[0] : e);
let retValue: any;
try {
retValue = addHandler(handler);
} catch (err) {
subscriber.error(err);
return undefined;
}
if (!isFunction(removeHandler)) {
return undefined;
}
// This returned function will be called when the observable
// is unsubscribed. That is, on manual unsubscription, on complete, or on error.
return () => removeHandler(handler, retValue) ;
});
Source .
Как видите , через handler
, вы можете позволить возвращаемому наблюдаемому, когда пришло время что-то испустить.