Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Throttling notifications from multiple users with RxJS - no throttling
let Rx = window['rxjs'];
let {from, of, asyncScheduler} = Rx;
let {mergeMap, filter, delay} = Rx.operators;
console.clear();
let notifications = [
{ userId: 1, name: 'A1', delay: 100 }, // should be shown
{ userId: 1, name: 'A2', delay: 1500 }, // shouldn't be shown
{ userId: 1, name: 'A3', delay: 2500 }, // shouldn't be shown
{ userId: 1, name: 'A4', delay: 3500 }, // should be shown
{ userId: 2, name: 'B1', delay: 200 }, // should be shown
{ userId: 2, name: 'B2', delay: 300 }, // shouldn't be shown
{ userId: 2, name: 'B3', delay: 3500 }, // should be shown
]
//mock source that emits notifications
let mockSource$ = from(notifications).pipe(
mergeMap((notif) => {
return of(notif).pipe(delay(notif.delay));
}),
)
mockSource$.subscribe(showNotification);
//display notifications widget
let container = document.querySelector('.container');
function showNotification(notif) {
const newElem = document.createElement('div');
newElem.classList.add('item');
newElem.innerHTML = notif.name;
container.appendChild(newElem);
setTimeout(() => {newElem.remove()}, 800); // remove notification element
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.