exhaustMap.js 1.2 KB

1234567891011121314151617181920212223242526272829
  1. import { map } from './map';
  2. import { innerFrom } from '../observable/innerFrom';
  3. import { operate } from '../util/lift';
  4. import { createOperatorSubscriber } from './OperatorSubscriber';
  5. export function exhaustMap(project, resultSelector) {
  6. if (resultSelector) {
  7. return function (source) {
  8. return source.pipe(exhaustMap(function (a, i) { return innerFrom(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); }));
  9. };
  10. }
  11. return operate(function (source, subscriber) {
  12. var index = 0;
  13. var innerSub = null;
  14. var isComplete = false;
  15. source.subscribe(createOperatorSubscriber(subscriber, function (outerValue) {
  16. if (!innerSub) {
  17. innerSub = createOperatorSubscriber(subscriber, undefined, function () {
  18. innerSub = null;
  19. isComplete && subscriber.complete();
  20. });
  21. innerFrom(project(outerValue, index++)).subscribe(innerSub);
  22. }
  23. }, function () {
  24. isComplete = true;
  25. !innerSub && subscriber.complete();
  26. }));
  27. });
  28. }
  29. //# sourceMappingURL=exhaustMap.js.map