fetch.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { Observable } from '../../Observable';
  2. export function fromFetch(input, init) {
  3. return new Observable(subscriber => {
  4. const controller = new AbortController();
  5. const signal = controller.signal;
  6. let outerSignalHandler;
  7. let unsubscribed = false;
  8. if (init) {
  9. if (init.signal) {
  10. outerSignalHandler = () => {
  11. if (!signal.aborted) {
  12. controller.abort();
  13. }
  14. };
  15. init.signal.addEventListener('abort', outerSignalHandler);
  16. }
  17. init.signal = signal;
  18. }
  19. else {
  20. init = { signal };
  21. }
  22. fetch(input, init).then(response => {
  23. subscriber.next(response);
  24. subscriber.complete();
  25. }).catch(err => {
  26. if (!unsubscribed) {
  27. subscriber.error(err);
  28. }
  29. });
  30. return () => {
  31. unsubscribed = true;
  32. controller.abort();
  33. };
  34. });
  35. }
  36. //# sourceMappingURL=fetch.js.map