fetch.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { __assign, __rest } from "tslib";
  2. import { createOperatorSubscriber } from '../../operators/OperatorSubscriber';
  3. import { Observable } from '../../Observable';
  4. import { innerFrom } from '../../observable/innerFrom';
  5. export function fromFetch(input, initWithSelector) {
  6. if (initWithSelector === void 0) { initWithSelector = {}; }
  7. var selector = initWithSelector.selector, init = __rest(initWithSelector, ["selector"]);
  8. return new Observable(function (subscriber) {
  9. var controller = new AbortController();
  10. var signal = controller.signal;
  11. var abortable = true;
  12. var outerSignal = init.signal;
  13. if (outerSignal) {
  14. if (outerSignal.aborted) {
  15. controller.abort();
  16. }
  17. else {
  18. var outerSignalHandler_1 = function () {
  19. if (!signal.aborted) {
  20. controller.abort();
  21. }
  22. };
  23. outerSignal.addEventListener('abort', outerSignalHandler_1);
  24. subscriber.add(function () { return outerSignal.removeEventListener('abort', outerSignalHandler_1); });
  25. }
  26. }
  27. var perSubscriberInit = __assign(__assign({}, init), { signal: signal });
  28. var handleError = function (err) {
  29. abortable = false;
  30. subscriber.error(err);
  31. };
  32. fetch(input, perSubscriberInit)
  33. .then(function (response) {
  34. if (selector) {
  35. innerFrom(selector(response)).subscribe(createOperatorSubscriber(subscriber, undefined, function () {
  36. abortable = false;
  37. subscriber.complete();
  38. }, handleError));
  39. }
  40. else {
  41. abortable = false;
  42. subscriber.next(response);
  43. subscriber.complete();
  44. }
  45. })
  46. .catch(handleError);
  47. return function () {
  48. if (abortable) {
  49. controller.abort();
  50. }
  51. };
  52. });
  53. }
  54. //# sourceMappingURL=fetch.js.map