- From: Domenic Denicola <d@domenic.me>
- Date: Mon, 2 Mar 2015 23:36:06 +0000
- To: Tab Atkins Jr. <jackalmage@gmail.com>, Dean Tribble <tribble@e-dean.com>
- CC: "public-script-coord@w3.org" <public-script-coord@w3.org>, es-discuss <es-discuss@mozilla.org>
From: es-discuss [mailto:es-discuss-bounces@mozilla.org] On Behalf Of Tab Atkins Jr.
> Cancellations should "chain"
This is the most important issue, in my mind. I often illustrate it with
```js
function fetchUser(id) {
return fetch(`/users/user/${id}`);
}
function fetchUserAsJSON(id) {
return fetchUser(id).then(JSON.parse);
}
```
If `fetchUser(1)` is cancellable but `fetchUserAsJSON(1)` is not, then I think we've failed.
However, I think this still works with cancellation tokens:
```js
function fetchUser(id, canceller) {
return fetch(`/users/user/${id}`, { canceller });
}
function fetchUserAsJSON(id, canceller) {
return fetchUser(id, canceller).then(JSON.parse);
}
```
The API stays the same for both of them.
> Combinators should combine cancellations
Still works, I think, although again in a different form:
```js
function fetchUsers(ids, canceller) {
return Promise.all(ids.map(id => fetchUser(id, canceller)));
}
```
> You need to be able to "clean" a cancellable promise
Simple:
```js
function fetchUserUncancellable(id) {
return fetchUser(id); // no second argument
}
```
Overall I am more optimistic about cancellation tokens these days...
Received on Monday, 2 March 2015 23:36:35 UTC