Hi all,
You're probably familiar with the mw.Api
JavaScript class provided by MediaWiki, which can be used to
make requests to our action API.
promise = ( new mw.Api() ).get( /*...*/ );
You may also know that the promises it returns are enhanced with
an .abort() method, which cancels
the underlying HTTP request and rejects the promise.
promise.abort();
The problem is that this method is only available on the original
promise object. If you try to chain promises, it no longer works:
promise.then( /*...*/ ).abort(); // Error: abort is not a function
Copying this method to the chained promise is very cumbersome. I will spare you an example, but you can find it in the Phabricator task I filed for this problem: T346984. It's also not possible to do if you use async/await, which we'll hopefully be able to use in MediaWiki code soon.
The designers of the HTML5 Fetch API came up with a different solution to the problem of cancelling HTTP requests: abort signals. The Fetch API is increasingly being used outside of the MediaWiki world, and so I would like to enhance our mw.Api to support the same approach.
Here's my proposal: https://gerrit.wikimedia.org/r/c/mediawiki/core/+/959350
As you can tell by the six-digit patch number, I've had a hard time finding anyone else interested in this, so I'm sending out this call for reviewers. I hope there's someone out there with review rights who likes the idea as well :)
You can read the documentation with examples of the new style
here:
https://patchdemo.wmcloud.org/wikis/ee373520a4/w/docs/js/mw.Api-AbortController.html
The.abort() method is not being
removed, and as a bonus, the patch includes improved documentation
for that style of cancellable promises:
https://patchdemo.wmcloud.org/wikis/ee373520a4/w/docs/js/mw.Api-AbortablePromise.html
-- Bartosz DziewoĆski