Prevent interruptAndCheck from delaying too often when delay takes to… #1787
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
…o long
I ran into an issue where Firefox setTimeout(resolve, 0) was taking the majority of the time between interruptAndCheck calls.
performance.now() - current will be greater than globalInterruptionPeriod so it gets called every iteration
As a work around I can greatly increase the globalinterruptionPeriod with something like setInterruptionPeriod(150) - but then other browsers that don't have the slower setTimeout callback will have slower cancellation responses.
Other fixes I considered: have delayNextTick return performance.now() only for setTimout path (code below) or letting users provide a function that gets called back with current and they can either return current or process.now()
export function delayNextTick(current: number): Promise {
return new Promise(resolve => {
// In case we are running in a non-node environment,
setImmediate
isn't available.// Using
setTimeout
of the browser API accomplishes the same result.if (typeof setImmediate === 'undefined') {
// there is no way to guarantee
setTimeout(() => resolve(performance.now()), 0);
} else {
setImmediate(() => resolve(current));
}
});
}