• Sound mode S-10, pre-alpha
  • Design record 0007, Accepted

TSR1001

Promise from '{0}' is not handled. Await it, return it, or attach '.catch'.

A promise is dropped without await, return or a rejection handler, so a rejection would go unhandled. Await it, return it or add .catch.

Rule S-10: No floating promises (level: strict). Reported by ts-r-check and ts-r-lsp in files that opt in to sound mode. See Sound mode.

What it means

In sound and strict files an expression statement whose value is promise-like (or an array of them) must be awaited, returned or handled with .catch(h) or .then(f, h). .then(f) without a rejection handler, or .finally alone, still floats.

Example

Spec case from design record 0007 (checked by the record's case harness, not by this site's build)
// The promise is dropped; a rejection would be unhandled.
async function save(x: string): Promise<void> {
  console.log(x);
}
save("a"); // @expect TSR1001
export {};

How to fix

  • await it in an async function, or return it.
  • Attach a rejection handler: save(user).catch(report) or .then(log, report).
  • For arrays of promises, await Promise.all(...).

Sound mode is defined in design record 0007 (accepted 2026-10-15).