Files
scriptc/tests/corpus/js-abort-portable.js
Chris Tate a07998f667 Expand static three.js workflows and host integration (#621)
* Expand static three.js workflows and host integration

* Preserve JavaScript class state in static three.js workflows

* Preserve inferred JavaScript behavior across static workflows

* Preserve inferred callables and native compatibility boundaries

* Retain annotated JavaScript factory exports and bootstrap-safe call spreads

* Preserve Buffer and child callback identities in static packages

* Clarify JavaScript symbol spread support
2026-10-02 19:56:34 -05:00

28 lines
1.5 KiB
JavaScript

const controller = new AbortController();
const signal = controller.signal;
console.log("identity", signal === controller.signal, signal.aborted, signal.reason);
let count = 0;
function removed() { console.log("removed"); }
signal.addEventListener("abort", removed);
signal.removeEventListener("abort", removed);
signal.addEventListener("abort", function (event) {
count++;
console.log("listener", this === signal, event.type, event.target === signal, signal.aborted);
}, { once: true });
signal.onabort = function (event) { console.log("onabort", this === signal, event.type); };
const combined = AbortSignal.any([signal, new AbortController().signal]);
const reason = { message: "cancelled" };
controller.abort(reason);
controller.abort("ignored");
console.log("reason", signal.reason === reason, combined.aborted, combined.reason === reason, count);
try { signal.throwIfAborted(); } catch (error) { console.log("throw", error === reason); }
const already = AbortSignal.abort("ready");
console.log("already", already.aborted, already.reason, AbortSignal.any([already]).reason);
const defaultSignal = AbortSignal.abort();
console.log("default", defaultSignal.reason.name, defaultSignal.reason.message);
console.log("timeout", AbortSignal.timeout(1000).aborted);
try { AbortSignal.timeout(-1); } catch (error) { console.log("range", error.name, error.code); }
const timed = AbortSignal.timeout(1);
await new Promise(resolve => setTimeout(resolve, 20));
console.log("timed", timed.aborted, timed.reason.name, timed.reason.message);