mirror of
https://github.com/tenrok/axios.git
synced 2026-06-23 20:40:40 +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) {
|
this.promise.then(function(cancel) {
|
||||||
if (!token._listeners) return;
|
if (!token._listeners) return;
|
||||||
|
|
||||||
var i;
|
var i = token._listeners.length;
|
||||||
var l = token._listeners.length;
|
|
||||||
|
|
||||||
for (i = 0; i < l; i++) {
|
while (i-- > 0) {
|
||||||
token._listeners[i](cancel);
|
token._listeners[i](cancel);
|
||||||
}
|
}
|
||||||
token._listeners = null;
|
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) {
|
it('should allow passing FormData', function (done) {
|
||||||
var form = new FormData();
|
var form = new FormData();
|
||||||
var file1= Buffer.from('foo', 'utf8');
|
var file1= Buffer.from('foo', 'utf8');
|
||||||
|
|||||||
Reference in New Issue
Block a user