promisery

Crates.iopromisery
lib.rspromisery
version2.0.1
created_at2025-07-03 12:11:27.456977+00
updated_at2025-07-04 11:52:28.03913+00
descriptionA JavaScript-inspired, ergonomic, and composable Promise type for Rust, supporting background work, chaining, and error handling with Result.
homepage
repositoryhttps://github.com/Orkking2/rust-promises
max_upload_size
id1736176
size33,924
Orkking2 (Orkking2)

documentation

https://docs.rs/promisery

README

Promisery

Crates.io Docs.rs License

A JavaScript-inspired, ergonomic, and composable Promise type for Rust, supporting background work, chaining, and error handling with Result.


Features

  • ECMAScript 5-style promises with Rust's type safety
  • Chaining with .then, .map, and .map_err
  • Combinators: Promise::all, Promise::race
  • Panic-safe: panics in promise tasks are detected and reported
  • Fully documented with tested examples
  • Timeout and deadline support: Wait with [wait_timeout] or [wait_deadline]
  • Safe and unsafe waiting: Choose between [wait] (safe, double Result) and [wait_nopanic] (unsafe, panics on background panic)

Installation

Add to your Cargo.toml:

promisery = "2.0"

Example

use promisery::Promise;

let p = Promise::<_, ()>::new(|| Ok(2))
    .then(|res| res.map(|v| v * 10))
    .then(|res| res.map(|v| v + 5));
assert_eq!(p.wait(), Ok(Ok(25)));

API Highlights

  • Chaining:
    • .then for full control over result and error
    • .map for value transformation
    • .map_err for error transformation
  • Combinators:
    • Promise::all waits for all promises (returns Result<Result<Vec<T>, E>, PromisePanic>)
    • Promise::race resolves/rejects with the first to finish (returns Result<Result<T, E>, PromisePanic>)
  • Waiting:
    • .wait() — safe, never panics, returns a double Result
    • .wait_nopanic() — unsafe, panics if the background task panicked
    • .wait_timeout(duration) — wait with a timeout
    • .wait_deadline(instant) — wait until a deadline
  • Panic Handling:
    • Panics in promise tasks are detected and reported via PromisePanic

Why Promisery?

  • Lightweight, no async runtime required
  • Familiar API for those coming from JavaScript
  • Integrates with Rust's Result-based error handling
  • Does not spawn a new thread for each action that produces a new promise (see the documentation for each method for more details)

License

MIT OR Apache-2.0


See docs.rs/promisery for full documentation, API details, and more examples, including usage of wait_nopanic, wait_timeout, and wait_deadline.

Commit count: 0

cargo fmt