retryWhen.js 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import { innerFrom } from '../observable/innerFrom';
  2. import { Subject } from '../Subject';
  3. import { operate } from '../util/lift';
  4. import { createOperatorSubscriber } from './OperatorSubscriber';
  5. export function retryWhen(notifier) {
  6. return operate(function (source, subscriber) {
  7. var innerSub;
  8. var syncResub = false;
  9. var errors$;
  10. var subscribeForRetryWhen = function () {
  11. innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {
  12. if (!errors$) {
  13. errors$ = new Subject();
  14. innerFrom(notifier(errors$)).subscribe(createOperatorSubscriber(subscriber, function () {
  15. return innerSub ? subscribeForRetryWhen() : (syncResub = true);
  16. }));
  17. }
  18. if (errors$) {
  19. errors$.next(err);
  20. }
  21. }));
  22. if (syncResub) {
  23. innerSub.unsubscribe();
  24. innerSub = null;
  25. syncResub = false;
  26. subscribeForRetryWhen();
  27. }
  28. };
  29. subscribeForRetryWhen();
  30. });
  31. }
  32. //# sourceMappingURL=retryWhen.js.map