operators/average.js

  1. import { Observable } from '../Observable';
  2. /**
  3. * Takes an average of everything coming into the event stream until it completes
  4. *
  5. * @memberof operators
  6. *
  7. * @param {Observable} source$
  8. * @returns {Observable}
  9. */
  10. export const average = function (source$) {
  11. return new Observable(function ({ next, error, complete }) {
  12. let count = 0;
  13. let total = 0;
  14. const subscription = source$.subscribe({
  15. next(value) {
  16. count++;
  17. total += value;
  18. },
  19. error,
  20. complete () {
  21. next(total / count);
  22. complete();
  23. }
  24. });
  25. return () => subscription.unsubscribe();
  26. });
  27. };
  28. Observable.average = average;
  29. Observable.prototype.average = function () {
  30. return average(this);
  31. };