promisery
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 (see
Promise::wait_nopanic) - Fully documented with tested examples
Installation
Add to your Cargo.toml:
= "1.0.0"
Example
use Promise;
let p = new
.then
.then;
assert_eq!;
API Highlights
- Chaining:
.thenfor full control over result and error.mapfor value transformation.map_errfor error transformation
- Combinators:
Promise::allwaits for all promisesPromise::raceresolves/rejects with the first to finish
- Panic Handling:
- Panics in promise tasks are detected and reported via
PromisePanic - Use
.wait_nopanic()to safely handle panics
- Panics in promise tasks are detected and reported via
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 and more examples.