Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. import { fromEvent, interval } from 'rxjs';
  2. import { delayWhen, map, tap, scan, debounce } from 'rxjs/operators';
  3.  
  4. let queued: number = 0;
  5. let completed: number = 0;
  6. const start = Date.now();
  7.  
  8. const clicks = fromEvent(document, 'click');
  9.  
  10. function tf(): number { return Date.now() - start };
  11.  
  12. const clickMsgs = clicks.pipe(
  13. debounce(() => interval(100)),
  14. scan(x => { queued = x + 1; return queued} , 0),
  15. map(x => { return { msg: `Click ${x}`, delay: Math.floor(Math.random() * 5000) } } )
  16. );
  17.  
  18. const delayedClicks = clickMsgs.pipe(
  19. map(x => { x['est'] = tf() + x.delay; return x}),
  20. tap(x => console.log(`>>>[${tf()}: ${queued}/${completed}]: ${JSON.stringify(x)} >>>`)),
  21. delayWhen(x => interval(x.delay))
  22. );
  23.  
  24. delayedClicks.subscribe(x => {
  25. completed++;
  26. console.log(`<<<[${tf()}: ${queued}/${completed}]: ${JSON.stringify(x)} <<<`)
  27. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement