@lifaon/rx-js-light
Version:
Blazing fast Observables
21 lines (20 loc) • 545 B
JavaScript
export function debounceMicrotaskObservable(subscribe) {
return emit => {
let microtaskCount = 0;
const incrementMicrotaskCount = () => {
return microtaskCount = (microtaskCount + 1) % 0x80000000;
};
const unsubscribe = subscribe(value => {
const currentMicroTaskId = incrementMicrotaskCount();
queueMicrotask(() => {
if (currentMicroTaskId === microtaskCount) {
emit(value);
}
});
});
return () => {
incrementMicrotaskCount();
unsubscribe();
};
};
}