[−][src]Function l337_redis::async_transaction
pub async fn async_transaction<C, K, T, F, Args, '_, '_, '_>(
con: &'_ mut C,
keys: &'_ [K],
args: &'_ mut Args,
func: F
) -> RedisResult<T> where
C: ConnectionLike,
K: ToRedisArgs,
F: for<'a> FnMut(&'a mut C, &'a mut Pipeline, &'a mut Args) -> BoxFuture<'a, RedisResult<Option<T>>>,
Rewite of redis::transaction for use with an async connection. It is assumed that the fn's return value will be the return value of Pipeline::query_async. Returning None from this fn will cause it to be re-run, as that is the value returned from Pipeline::query_async when run in atomic mode, and the watched keys are modified somewhere else.
use redis::AsyncCommands; use futures::prelude::*; let key = "the_key"; let mut count = 0i32; let (new_val,) : (isize,) = l337_redis::async_transaction(&mut con, &[key], &mut count, |con, pipe, count_ref| async move { *count_ref += 1; let old_val : isize = con.get(key).await?; pipe .set(key, old_val + 1).ignore() .get(key) .query_async(con) .await }.boxed()).await?; println!("The incremented number is: {}", new_val);