Optional ReadonlyerrorThe work's error. Present iff status === 'failed'. Reading
before terminal returns undefined.
ReadonlyidStable id assigned at detach time. The key of the in-flight
registry (lookupDetachedHandle).
Optional ReadonlyresultThe work's result. Present iff status === 'done'. Reading
before terminal returns undefined.
ReadonlystatusCurrent state. Read directly for sync access.
Opt-in async join. Returns a Promise that:
{ result } when status becomes 'done'Error when status becomes 'failed'Calling wait() does NOT change the handle's lifecycle — it's
passive observation. If never called, the work still completes;
the handle just goes uncollected (parent execution unaffected).
Use when:
Don't use when:
detachAndForget — no handle returned)handle.status directly)
Handle returned by
chart.detachAndJoinLater(...)andexecutor.detachAndJoinLater(...). Exposes status as PROPERTIES so sync access is property-read (cheap, no allocation). The single methodwait()returns a Promise for opt-in async join.The handle is not Promise-shaped (no
.then()) — that would make it accidentally awaitable, defeating the fire-and-forget semantics. To await, the consumer must call.wait()explicitly.Lifecycle:
queued → driver received the work, hasn't started it running → driver started the work done → terminal: result available failed → terminal: error available
doneandfailedare TERMINAL — once reached, status never changes again. A scheduling refusal can go straight fromqueuedtofailed, without starting the child.