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:
@@ -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;
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user