The Hidden Cost of Promise.race in Production AI Workloads
Why Promise.race, Promise.all, and async helpers need an ownership model for cancellation, cleanup, and production agent work.
Three providers. One winner. Three invoices.
const winner = await Promise.race([fetch(OPENAI, { body }),fetch(ANTHROPIC, { body }),fetch(GEMINI, { body }),]);
It is easy to assume a race cancels the losers. Native Promise.race resolves on the first settlement and leaves every other promise running unless the caller wires cancellation into each branch. TCP completes. Tokens bill. .then callbacks fire. Cleanup remains a manual convention. Promise.any and Promise.all have the same ownership gap.
Native promises model values, not ownership. There is no ownership parent, no built-in cancellation path, and no scope cleanup contract.
There is still work running after the value settles.
The one line that fixes the 80% case
Before we fix racing, fix the thing every codebase does first: process a list of items with concurrency, retries, and a timeout.
import { work...
Copyright of this story solely belongs to hackernoon.com. To see the full text click HERE