I would like to propose a new Promise combinator: Promise.pick(iterable, selector).
Promise.pick resolves with the first fulfilled value that satisfies a user-defined predicate. Unlike existing combinators such as Promise.all, Promise.race, Promise.any, and Promise.allSettled, which select based on timing or structural completion, this proposal introduces predicate-based selection semantics. The intent is to express logical suitability directly rather than relying on settlement order.
A common requirement is to obtain the first acceptable result among multiple concurrent asynchronous operations. Current patterns typically require composing existing combinators manually, for example using Promise.allSettled() followed by filtering, or transforming inputs before passing them to Promise.any(). These approaches either wait for all promises to settle, modify rejection behavior, or obscure the intent of predicate-based selection.
The proposed API is:
Promise.pick(iterable, selector)
Where iterable is an iterable of values or Promises, and selector is a predicate applied to fulfilled values.
Example:
Promise.pick(
[fetchPrimary(), fetchBackup()],
response => response.status === 200
);
This resolves with the first fulfilled response whose status is 200, independent of settlement order.