Browse Source

WIP: BugFix #636 Pause and resume (In a quick succession) gets you lot of exceptions and an infinite loop

pull/637/head
Varun Sharma 6 years ago
parent
commit
f47babfd0b
  1. 23
      papaparse.js

23
papaparse.js

@ -473,6 +473,7 @@ License: MIT @@ -473,6 +473,7 @@ License: MIT
this._handle = null;
this._finished = false;
this._completed = false;
this._halted = false;
this._input = null;
this._baseIndex = 0;
this._partialLine = '';
@ -497,6 +498,7 @@ License: MIT @@ -497,6 +498,7 @@ License: MIT
chunk = modifiedChunk;
}
this.isFirstChunk = false;
this._halted = false;
// Rejoin the line we likely just split in two by chunking the file
var aggregate = this._partialLine + chunk;
@ -504,8 +506,10 @@ License: MIT @@ -504,8 +506,10 @@ License: MIT
var results = this._handle.parse(aggregate, this._baseIndex, !this._finished);
if (this._handle.paused() || this._handle.aborted())
if (this._handle.paused() || this._handle.aborted()) {
this._halted = true;
return;
}
var lastIndex = results.meta.cursor;
@ -531,8 +535,10 @@ License: MIT @@ -531,8 +535,10 @@ License: MIT
else if (isFunction(this._config.chunk) && !isFakeChunk)
{
this._config.chunk(results, this._handle);
if (this._handle.paused() || this._handle.aborted())
if (this._handle.paused() || this._handle.aborted()) {
this._halted = true;
return;
}
results = undefined;
this._completeResults = undefined;
}
@ -554,6 +560,11 @@ License: MIT @@ -554,6 +560,11 @@ License: MIT
return results;
};
this.halted = function()
{
return this._halted;
}
this._sendError = function(error)
{
if (isFunction(this._config.error))
@ -1089,8 +1100,12 @@ License: MIT @@ -1089,8 +1100,12 @@ License: MIT
this.resume = function()
{
_paused = false;
self.streamer.parseChunk(_input, true);
if(self.streamer.halted()) {
_paused = false;
self.streamer.parseChunk(_input, true);
} else {
setTimeout(() => this.resume(), 3);
}
};
this.aborted = function()

Loading…
Cancel
Save