- From: Anne van Kesteren <notifications@github.com>
- Date: Thu, 26 Mar 2015 02:08:26 -0700
- To: whatwg/fetch <fetch@noreply.github.com>
- Message-ID: <whatwg/fetch/issues/27@github.com>
## Goal Provide developers with a method to abort something initiated with `fetch()` in a way that is not overly complicated. ## Previous discussion * https://github.com/whatwg/fetch/issues/20 * https://github.com/slightlyoff/ServiceWorker/issues/592 * https://github.com/slightlyoff/ServiceWorker/issues/625 ## Viable solutions We have two contenders. Either `fetch()` returns an object that is more than a promise going forward or `fetch()` is passed something, either an object or a callback that gets handed an object. ### A promise-subclass In order to not clash with cancelable promises (if they ever materialize) we should pick a somewhat unique method name for abortion. I think `terminate()` would fit that bill. var f = fetch(url) f.terminate() Note: the Twitter-sphere seemed somewhat confused about the capabilities of this method. It would most certainly terminate any ongoing stream activity as well. It's not limited to the "lifetime" of the promise. ### A controller The limited discussion on es-discuss https://esdiscuss.org/topic/cancelable-promises seemed to favor a controller. There are two flavors that keep coming back. Upfront construction: var c = new FetchController fetch(url, {controller: c}) c.abort() Revealing constructor pattern: fetch(url, controller(c => c.abort())) ## Open issues * What is the effect on the promise? Both forever-pending and explicit rejection have reasonable arguments. We could offer the choice to the developer, but what should be the default? * What is the effect on the stream? I suspect the Streams Standard is already conclusive on this. * What syntax of the above two-three solutions do we favor? --- Reply to this email directly or view it on GitHub: https://github.com/whatwg/fetch/issues/27
Received on Thursday, 26 March 2015 09:09:08 UTC