Skip to main content

Try

Runtime: any — Node.js ≥ 22 or a modern browser

Go-style Result values for async code: tryCatch runs a function and hands back a success or failure branch instead of throwing. The point is the type system — a Result cannot be read without acknowledging the error branch, whereas a try/catch binding is unknown and easy to ignore. Use it where failure is an expected outcome, and keep throwing for genuinely exceptional states that no caller can sensibly handle.

Example​

import { tryCatch } from '@rtorcato/js-common/try'

const result = await tryCatch(() => fetch('/api/user').then((r) => r.json() as Promise<User>))

if (result.error) {
console.warn('user lookup failed', result.error)
return null
}

result.data.email // narrowed to User — unreachable without handling `error` first

Note the name collision: tryCatch here is the Result helper. The errors module's similarly-shaped helper is tryWithFallback, which returns a fallback value instead.

Import​

import { Failure, Result, Success } from '@rtorcato/js-common/try'

Exports​

NameSummary
FailureError branch of a Result — carries a null value and an error of type E.
ResultGo-style discriminated union representing either a Success<T> or a Failure<E>, for async code that prefers explicit error returns over thrown exceptions.
SuccessSuccessful branch of a Result — carries the value and a null error.
isSuccessType guard that narrows a Result to its Success branch when the error is null.
tryCatchRun an async function and capture any thrown error into a Result, eliminating try/catch at the call site.
tryCatchSyncSynchronous counterpart to {@link tryCatch} — run a function and capture any thrown error into a Result, so Result is usable outside async boundaries.

See also​

  • errors — assert, custom errors, message extraction
  • promises — timeout and error-tuple helpers
  • abortController — cancel in-flight work with an AbortSignal