Skip to content

Use microtask scheduling for zero-timeout async promise callbacks#512

Draft
Copilot wants to merge 3 commits into
mainfrom
copilot/fix-promise-resolution-ordering
Draft

Use microtask scheduling for zero-timeout async promise callbacks#512
Copilot wants to merge 3 commits into
mainfrom
copilot/fix-promise-resolution-ordering

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 20, 2026

createAsyncPromise callback processing was scheduled through setTimeout, which shifts resolution into a macrotask and can break native Promise ordering expectations. This change aligns default async callback timing with microtask semantics while preserving explicit timeout behavior.

  • Scheduling behavior update (timeoutItemProcessor)

    • Keep timeout > 0 behavior unchanged (setTimeout(timeout)).
    • For default/zero timeout, schedule pending handlers on the microtask queue:
      • prefer queueMicrotask
      • fallback to Promise.resolve().then(...)
      • final fallback to setTimeout(0) if neither is available.
  • Fake-timer compatibility guard

    • Detect Sinon fake timers (setTimeout.clock) and use setTimeout(0) in that mode to keep fake-clock-driven tests deterministic.
    • Added inline comments documenting this intentional compatibility path.
  • Regression coverage

    • Added a focused async promise timing test to verify default ordering is microtask-based (callback runs after synchronous code without macrotask delay).
const order: string[] = [];

order.push("1");
createAsyncPromise<void>((resolve) => resolve()).then(() => order.push("3"));
order.push("2");

await Promise.resolve();
// order => ["1", "2", "3"]

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6417 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-40433829 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,17301806281609580974,3578498758989275208,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7276843448293947312,11394191665234657874,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
  • android.clients.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6417 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-40433829 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,17301806281609580974,3578498758989275208,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7276843448293947312,11394191665234657874,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
  • clients2.google.com
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-55518050 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --disable-web-security --disable-site-isolation-trials --no-sandbox http://localhost:9876/?id=55518050 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 bash (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6417 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-40433829 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,17301806281609580974,3578498758989275208,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7276843448293947312,11394191665234657874,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
  • update.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6417 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-40433829 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,17301806281609580974,3578498758989275208,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7276843448293947312,11394191665234657874,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6417 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-40433829 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,17301806281609580974,3578498758989275208,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7276843448293947312,11394191665234657874,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome /home/REDACTED/.cache/puppeteer/chrome/linux-148.0.7778.167/chrome-linux64/chrome --user-data-dir=/tmp/karma-40433829 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --disable-gpu --disable-web-security --disable-dev-shm-usage http://localhost:9876/?id=40433829 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=6673 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-55518050 --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8884603478705353464,3434243025594482413,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,14268169751254710019,12808179066795444456,4 --trace-process-track-uuid=3190708989122997041 git (dns block)
  • www.googleapis.com
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node node install.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Fix promise resolution ordering by replacing setTimeout Use microtask scheduling for zero-timeout async promise callbacks May 20, 2026
Copilot finished work on behalf of nev21 May 20, 2026 06:45
Copilot AI requested a review from nev21 May 20, 2026 06:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: setTimeout used instead of microtask queue for promise resolution

2 participants