2
0
mirror of https://github.com/tenrok/axios.git synced 2026-05-15 11:59:42 +03:00

Fixed race condition on immediate requests cancellation (#4261)

* Fixes #4260: fixed race condition on immediate requests cancellation

* Update http.js

Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
Dmitriy Mozgovoy
2022-05-09 19:12:29 +03:00
committed by GitHub
parent 27280ec260
commit de48c5d626
2 changed files with 30 additions and 3 deletions
+2 -3
View File
@@ -25,10 +25,9 @@ function CancelToken(executor) {
this.promise.then(function(cancel) {
if (!token._listeners) return;
var i;
var l = token._listeners.length;
var i = token._listeners.length;
for (i = 0; i < l; i++) {
while (i-- > 0) {
token._listeners[i](cancel);
}
token._listeners = null;
+28
View File
@@ -1166,6 +1166,34 @@ describe('supports http with nodejs', function () {
});
});
it('should able to cancel multiple requests with CancelToken', function(done){
server = http.createServer(function (req, res) {
res.end('ok');
}).listen(4444, function () {
var CancelToken = axios.CancelToken;
var source = CancelToken.source();
var canceledStack = [];
var requests = [1, 2, 3, 4, 5].map(function(id){
return axios
.get('/foo/bar', { cancelToken: source.token })
.catch(function (e) {
if (!axios.isCancel(e)) {
throw e;
}
canceledStack.push(id);
});
});
source.cancel("Aborted by user");
Promise.all(requests).then(function () {
assert.deepStrictEqual(canceledStack.sort(), [1, 2, 3, 4, 5])
}).then(done, done);
});
});
it('should allow passing FormData', function (done) {
var form = new FormData();
var file1= Buffer.from('foo', 'utf8');