Hi,
I have a case where I need to programmatically cancel a Resource
based request fetching CZML data. The request may be long-running, and the user may leave the page or sign out during the request’s pending state.
The resource is created like so:
const czmlResource = () => new Resource({
url: 'https://some-url-returning-czml.com'
});
… and it is used like so:
await czmlDataSource.process(czmlResource);
I cannot find anything in the documentation regarding cancellation of the API call created by the .process()
method. Is that correct, or is there a way to programmatically cancel it?
Request
objects do have a cancel
function, but its private-- meaning it won’t show up in our API documentation and is subject to break in a new release without warning.
The request
is always defined on the Resource
object. So you could do something like the following, but it may have other implications…
const request = czmlResource.request;
if (
request.state === RequestState.ISSUED ||
request.state === RequestState.ACTIVE
) {
request.cancel();
}
Thanks, Gabby.
As long as the solution relies on using a private API, I’ll have to solve it differently.
For future reference: I think my current solution will be to avoid using the new Resource({})
way of retrieving data, and instead rely on fetch()
and process the JSON results with CzmlDataSource.process()
. That way I’ll be able to hook on to fetch()
's AbortController for request cancellation.
I see. Currently I don’t think cancelling is supported in the public API.
We have been considering refactoring Resource
to work with native fetch
, which I think would help use cases like this. But no work is scheduled around this yet.
1 Like