Promise pipe operators
Promise-aware pipe operators, in the style of magrittr.
Like magrittr pipes, these operators can be used to chain together pipelines
of promise-transforming operations. Unlike magrittr pipes, these pipes wait
for promise resolution and pass the unwrapped value (or error) to the rhs
function call.
lhs %...>% rhs lhs %...T>% rhs lhs %...!% rhs lhs %...T!% rhs
lhs |
A promise object. |
rhs |
A function call using the magrittr semantics. It can return either a promise or non-promise value, or throw an error. |
The >
variants are for handling successful resolution, the !
variants are
for handling errors. The T
variants of each return the lhs instead of the
rhs, which is useful for pipeline steps that are used for side effects
(printing, plotting, saving).
promise %...>% func()
is equivalent to promise %>% then(func)
.
promise %...!% func()
is equivalent to promise %>% catch(func)
.
promise %...T>% func()
is equivalent to promise %T>% then(func)
.
promise %...T!% func()
is equivalent to promise %T>%
catch(func)
or promise %>% catch(func, tee = TRUE)
.
One situation where 3. and 4. above break down is when func()
throws an
error, or returns a promise that ultimately fails. In that case, the failure
will be propagated by our pipe operators but not by the
magrittr-plus-function "equivalents".
For simplicity of implementation, we do not support the magrittr feature of
using a .
at the head of a pipeline to turn the entire pipeline into a
function instead of an expression.
A new promise.
https://rstudio.github.io/promises/articles/overview.html#using-pipes
## Not run: library(future) plan(multisession) future_promise(cars) %...>% head(5) %...T>% print() # If the read.csv fails, resolve to NULL instead future_promise(read.csv("http://example.com/data.csv")) %...!% { NULL } ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.