Struct asynchronous::Promise
[−]
[src]
pub struct Promise<T, E> { // some fields omitted }
Stores a result of previous execution tasks. T : Type of value returned E : Type of error returned
Methods
impl<T, E> Promise<T, E> where T: Send + 'static, E: Send + 'static
[src]
fn new<F>(f: F) -> Promise<T, E> where F: Send + 'static + FnOnce() -> Result<T, E>
Execute a task inmediatly and returns its Promise.
let promise = asynchronous::Promise::new(|| { // Do something if true { Ok("value a")} else { Err("Error description") } });
fn sync(self) -> Result<T, E>
Syncronizes the execution with the caller, and returns its value.
use asynchronous::Promise; let promise_a = Promise::<_,&str>::new(|| { // Do something Ok("value a") }); let promise_b = Promise::<_,&str>::new(|| { // Do something Ok("value b") }); // Do something assert_eq!(promise_a.sync(), Ok("value a")); assert_eq!(promise_b.sync(), Ok("value b"));
fn all(vector: Vec<Promise<T, E>>) -> Promise<Vec<T>, Vec<Result<T, E>>>
Creates a new promise with the result of all other Promises in the vector.
use asynchronous::Promise; let mut vec_promises = Vec::new(); for i in 0..5 { vec_promises.push(Promise::<_,&str>::new(move || Ok(i) )) } let res = Promise::all(vec_promises).sync().unwrap(); assert_eq!(res, vec![0,1,2,3,4]);
fn then<TT, F>(self, f: F) -> Promise<TT, E> where F: Send + 'static + FnOnce(T) -> Result<TT, E>, TT: Send + 'static
Executes a new task if the result of the previous promise is Ok. It may return a new type in a correct result (Ok), but it must return the same type of error of its previous promise.
asynchronous::Promise::new(|| { Ok(1.23) }).then(|res| { assert_eq!(res, 1.23); Ok(34) }).then(|res| { assert_eq!(res, 34); if true { Ok(res) } else { Err("Final error")} }).sync();
fn fail<F>(self, f: F) -> Promise<T, E> where F: Send + 'static + FnOnce(E) -> Result<T, E>
Executes a new task if the result of the previous promise is Err. It may return a new type in a correct result (Ok), but it must return the same type of error of its previous promise.
asynchronous::Promise::new(|| { Err(32) }).then(|res| { unreachable!(); Ok(res) }).fail(|err| { assert_eq!(err, 32); Ok("Value Ok") }).sync();
fn finally<FT, FE>(self, ft: FT, fe: FE) where FT: Send + 'static + FnOnce(T), FE: Send + 'static + FnOnce(E)
Executes only one of the two functions received depending on the result of the previous promise (Ok or Err). It doesn't return anything and it's completly asynchronous.
asynchronous::Promise::new(|| { std::thread::sleep_ms(100); if true { Ok(32) } else { Err("Error txt") } }).finally(|res| { assert_eq!(res, 32); }, |err|{ unreachable!(); assert_eq!(err, "Error txt"); }); let a = 2 + 3; // This line is executed before the above Promise
fn finally_sync<FT, FE>(self, ft: FT, fe: FE) where FT: Send + 'static + FnOnce(T), FE: Send + 'static + FnOnce(E)
Executes only one of the two functions received depending on the result of the previous promise (Ok or Err). It doesn't return anything, but it's synchronized with the caller
use asynchronous::Promise; Promise::new(|| { std::thread::sleep_ms(100); if true { Ok(32) } else { Err("Error txt") } }).finally_sync(|res| { assert_eq!(res, 32); }, |err|{ unreachable!(); assert_eq!(err, "Error txt"); }); let a = 2 + 3; // This line is executed after the above Promise