Merges #2058 from @atscott
This commit is contained in:
Steve Gravrock
2025-05-03 10:00:11 -07:00
3 changed files with 26 additions and 0 deletions

View File

@@ -3282,6 +3282,12 @@ callbacks to execute _before_ running the next one.
//
// @return {!Promise<undefined>}
async function newMacrotask() {
if (NODE_JS) {
// setImmediate is generally faster than setTimeout in Node
// https://nodejs.org/en/learn/asynchronous-work/event-loop-timers-and-nexttick#setimmediate-vs-settimeout
return new Promise(resolve => void setImmediate(resolve));
}
// MessageChannel ensures that setTimeout is not throttled to 4ms.
// https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#reasons_for_delays_longer_than_specified
// https://stackblitz.com/edit/stackblitz-starters-qtlpcc

View File

@@ -718,6 +718,20 @@ describe('Clock (acceptance)', function() {
clock.uninstall();
});
it('flushes microtask queue between macrotasks', async () => {
const log = [];
await new Promise(r => clock.setTimeout(r, 10)).then(() => {
log.push(1);
Promise.resolve().then(() => log.push(2));
Promise.resolve().then(() => log.push(3));
});
await new Promise(r => clock.setTimeout(r, 10)).then(() => {
log.push(4);
Promise.resolve().then(() => log.push(5));
});
expect(log).toEqual([1, 2, 3, 4, 5]);
});
it('can run setTimeouts/setIntervals asynchronously', function() {
const recurring = jasmine.createSpy('recurring'),
fn1 = jasmine.createSpy('fn1'),

View File

@@ -226,6 +226,12 @@ callbacks to execute _before_ running the next one.
//
// @return {!Promise<undefined>}
async function newMacrotask() {
if (NODE_JS) {
// setImmediate is generally faster than setTimeout in Node
// https://nodejs.org/en/learn/asynchronous-work/event-loop-timers-and-nexttick#setimmediate-vs-settimeout
return new Promise(resolve => void setImmediate(resolve));
}
// MessageChannel ensures that setTimeout is not throttled to 4ms.
// https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#reasons_for_delays_longer_than_specified
// https://stackblitz.com/edit/stackblitz-starters-qtlpcc