Skip to content

add support for aborting via AbortController #54

Description

@prabirshrestha

https://developers.google.com/web/updates/2017/09/abortable-fetch

Currently it is only implemented in Firefox 57 and is coming to other browsers soon.

const controller = new AbortController();
const signal = controller.signal;

setTimeout(() => controller.abort(), 5000);

fetch(url, { signal }).then(response => {
  return response.text();
}).then(text => {
  console.log(text);
});

Will most likely need to implement another npm package that just include AbortController package. I found one but it also pollyfills fetch. https://github.com/mo/abortcontroller-polyfill

Activity

  1. developit commented on Oct 20, 2017

    @developit
    Owner

    So we'd need a new npm package that exports a standalone polyfill for AbortController, and then the only modifications needed to unfetch would be to proxy signal.onabort = request.abort. Seems like it might be doable in a few bytes.

  2. prabirshrestha commented on Oct 20, 2017

    @prabirshrestha
    Author

    Awesome. Could you post the link to the npm package?

  3. prabirshrestha commented on Mar 22, 2018

    @prabirshrestha
    Author
  4. lxsmnsyc commented on Apr 12, 2019

    @lxsmnsyc

    An implementation of WHATWG AbortController interface.

    https://github.com/mysticatea/abort-controller

  5. dangdennis commented on Nov 10, 2019

    @dangdennis

    As of 2019, https://caniuse.com/#search=abort AbortController is supported by 86% of browser users. But I'm not sure if AbortController is available for use with XMLHttpRequest. But there's an alternative since that req object already has an .abort API.

    So perhaps there can be a way expose the request's XMLHttpRequest.abort method to the caller from the promise wrapper. Although I'm unsure how you'd return that in the context of a Promise since resolve is only allowed to be called once. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/abort

    Edit:
    Nevermind, someone already solved it using event emitters.
    https://codesandbox.io/s/92vnjok08r

  6. JohnnyFun commented on Jan 10, 2020

    @JohnnyFun

    You could also just add an abort function on the returned promise. Hacky, but works.

    function unfetch(url, options) {
      options = options || {};
      const request = new XMLHttpRequest();
      const task = new Promise((resolve, reject) => {
       ...
      });
      task.abort = () => request.abort() // lol
      return task
    }
    
  7. nfantone commented on Feb 11, 2020

    @nfantone

    Any movements on this? With all major green browsers supporting it, AbortController is steadily becoming the norm with many sources and docs out there showing people how to use it. Would be nice to have it baked into unfetch.

  8. added this to the 5.0 milestone on Sep 29, 2020
  9. mikestopcontinues commented on Nov 30, 2020

    @mikestopcontinues

    node-fetch is actively recommending abort-controller. At least one of the PRs will bring support. What's preventing movement on this? What's everyone using in the meantime?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions