switchMap.js 1.2 KB

123456789101112131415161718192021222324
  1. import { innerFrom } from '../observable/innerFrom';
  2. import { operate } from '../util/lift';
  3. import { createOperatorSubscriber } from './OperatorSubscriber';
  4. export function switchMap(project, resultSelector) {
  5. return operate(function (source, subscriber) {
  6. var innerSubscriber = null;
  7. var index = 0;
  8. var isComplete = false;
  9. var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };
  10. source.subscribe(createOperatorSubscriber(subscriber, function (value) {
  11. innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();
  12. var innerIndex = 0;
  13. var outerIndex = index++;
  14. innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {
  15. innerSubscriber = null;
  16. checkComplete();
  17. })));
  18. }, function () {
  19. isComplete = true;
  20. checkComplete();
  21. }));
  22. });
  23. }
  24. //# sourceMappingURL=switchMap.js.map