rili::CancelablePromise< void > Class Template Reference
Inheritance diagram for rili::CancelablePromise< void >:
[legend]
Collaboration diagram for rili::CancelablePromise< void >:
[legend]

Public Types

typedef std::exception_ptr FailureType
 
typedef std::function< void(std::function< void()>)> OnCancel
 
typedef std::function< void()> OnResolveHandler
 
typedef std::function< void(FailureType const &)> OnRejectHandler
 
typedef std::function< void(OnResolveHandler const &, OnCancel const &)> BasicInitializer
 
typedef std::function< void(OnResolveHandler const &, OnRejectHandler const &, OnCancel const &)> ComplexInitializer
 
- Public Types inherited from rili::Promise< void >
typedef std::exception_ptr FailureType
 
typedef std::function< void()> OnResolveHandler
 
typedef std::function< void(FailureType const &)> OnRejectHandler
 
typedef std::function< void(OnResolveHandler const &)> BasicInitializer
 
typedef std::function< void(OnResolveHandler const &, OnRejectHandler const &)> ComplexInitializer
 

Public Member Functions

 CancelablePromise (BasicInitializer const &initializer) noexcept
 
 CancelablePromise (ComplexInitializer const &initializer) noexcept
 
void cancel () noexcept
 
- Public Member Functions inherited from rili::Promise< void >
 Promise (BasicInitializer const &initializer) noexcept
 
 Promise (ComplexInitializer const &initializer) noexcept
 
 Promise () noexcept
 
 Promise (FailureType const &rejected) noexcept
 
void resolve ()
 
void reject (FailureType const &rejected)
 
template<typename OnSuccess , typename PromiseType = typename std::result_of<OnSuccess()>::type>
detail::GetPromiseType< PromiseType >::type Then (OnSuccess const &onSuccess) noexcept
 
template<typename OnSuccess , typename OnFailure , typename PromiseType1 = typename std::result_of<OnSuccess()>::type, typename PromiseType2 = typename std::result_of<OnFailure(FailureType const&)>::type>
detail::GetPromiseType< PromiseType1 >::type Then (OnSuccess const &onSuccess, OnFailure const &onFailure) noexcept
 
template<typename OnFailure , typename PromiseType = typename std::result_of<OnFailure(FailureType const&)>::type>
detail::GetPromiseType< PromiseType >::type Catch (OnFailure const &onFailure) noexcept
 
template<typename OnCompleted , typename PromiseType = typename std::result_of<OnCompleted()>::type>
detail::GetPromiseType< PromiseType >::type Finally (OnCompleted const &onCompleted) noexcept
 

Additional Inherited Members

- Static Public Member Functions inherited from rili::Promise< void >
static rili::Promise< void > all (std::list< rili::Promise< void >> const &promises) noexcept
 
static rili::Promise< void > any (std::list< rili::Promise< void >> const &promises) noexcept
 
static rili::Promise< std::list< std::exception_ptr > > fetch (std::list< rili::Promise< void >> const &promises) noexcept
 

Detailed Description

template<>
class rili::CancelablePromise< void >

rili::CancelablePromise API allow easily chaining asynchronous actions to avoid "callback hell". Major difference between rili::CancelablePromise and A+ JS Promise is chaining behavior using Catch method.

rili::CancelablePromise<void> add to rili::Promise<void> posibility to cancel it. Canceled promise will be rejected with rili::promise::PromiseCanceled error.

Remarks
is just specialization of rili::CancelablePromise for void type.
is copiable, but copy share state with original instance.
is generally thread safe and instances can be pass throught and shared by multiple threads.
all operations (even Construction) are made asynchronous way and are non blocking.
Warning
if onCancel callback will be used, then registered handler will be invoked in case of any rejection including but ont only in case when rili::CancelablePromise<void>::cancel will be invoked. In addition it will be threated as plain error handler. When registered, if rili::CancelablePromise<void> will be rejected then std::terminate will not be called (even in case when other "outside" handlers are missing).
Note
rili::CancelablePromise<void> use rili::Context aquired during construction to dispatch asynchronously all further tasks(including chained children promises), so thread in which rili::CancelablePromise<void> is created may be important in some cases.
rili::CancelablePromise<void> can be rejected or resolved only once - further reject or resolve will be skipped.
Warning
There cannot be rejected rili::CancelablePromise<void> which don't have (now or in future) rejection handlers, or rili::CancelablePromise<void>, which is not rejected nor resolved. Check for this is made in debug builds (assert is used) in rili::CancelablePromise<void> destructor.
See also
rili::Context
rili::Promise
rili::Promise<void>
rili::CancelablePromise

Member Typedef Documentation

typedef std::function<void(OnResolveHandler const&, OnCancel const&)> rili::CancelablePromise< void >::BasicInitializer

type of user callback for two parameter 'pending' rili::CancelablePromise<void> constructor

typedef std::function<void(OnResolveHandler const&, OnRejectHandler const&, OnCancel const&)> rili::CancelablePromise< void >::ComplexInitializer

type of user callback for three parameter 'pending' rili::CancelablePromise<void> constructor

typedef std::exception_ptr rili::CancelablePromise< void >::FailureType

is type in which all kinds of rejections / exceptions are stored in rili::CancelablePromise<void>

typedef std::function<void(std::function<void()>)> rili::CancelablePromise< void >::OnCancel

can be used to register cancelation handler for pending rili::CancelablePromise<void>

typedef std::function<void(FailureType const&)> rili::CancelablePromise< void >::OnRejectHandler

can be used to reject rili::CancelablePromise<void>

typedef std::function<void()> rili::CancelablePromise< void >::OnResolveHandler

can be used to resolve rili::CancelablePromise<void>

Constructor & Destructor Documentation

rili::CancelablePromise< void >::CancelablePromise ( BasicInitializer const &  initializer)
explicitnoexcept

Create 'pending' rili::CancelablePromise<void>.

Call user provided function with callback as paramether which should be used to resolve rili::CancelablePromise and second one, which can be used to register handler for cancelations.

Remarks
User provided callback will be executed asynchronously
is not blocking.
is thread safe.
Note
If user provided function throw, then rili::CancelablePromise<void> is moved to rejected state with error equal to thrown exception.
Warning
If callback 'resolve' will not be called nor exception thrown, then rili::CancelablePromise<void> will stay in 'pending' state infinitely, which will block rili::Context::run infinitely (eventualy it can be canceled which is equal to 'reject').
Parameters
initializeris executed to resolve or reject rili::CancelablePromise<void>. It provide as parameter another function which can be used to resolve rili::CancelablePromise<void>, second reject and third to register cancelation handler.

Example:

rili::CancelablePromise<void> promise([](auto const& resolve, auto const&){
});
rili::CancelablePromise< void >::CancelablePromise ( ComplexInitializer const &  initializer)
explicitnoexcept

Create 'pending' rili::CancelablePromise<void>.

Call user provided function with first parameter as callback which should be used to resolve rili::CancelablePromise<void>, second which should be used to reject it and third which can be used to register handler for cancelations.

Remarks
User provided callback will be executed asynchronously
is not blocking.
is thread safe.
Note
If user provided function throw, then rili::CancelablePromise<void> is moved to rejected state with error equal to thrown exception.
Warning
If callback 'resolve' or 'reject' will not be called nor exception thrown, then rili::CancelablePromise<void> will stay in 'pending' state infinitely, which will block rili::Context::run infinitely (eventualy it can be canceled which is equal to 'reject').
Parameters
initializeris function which is executed to resolve or reject rili::CancelablePromise<void>. It provide as first parameter another function which can be used to resolve rili::CancelablePromise<void>, as second function which can be used to reject rili::CancelablePromise<void> and third to register cancelation handler.

Example:

rili::CancelablePromise<void> promise([](auto const&, auto const& reject, auto const&){
reject(std::make_exception_ptr("Huston, we have a problem!!!"));
});

Member Function Documentation

void rili::CancelablePromise< void >::cancel ( )
noexcept

can be used to cancel rili::CancelablePromise<void>.

As result it will be immediately rejected with rili::promise::PromiseCanceled error, if is not already 'rejected' or 'resolved'

Remarks
is not blocking.
is thread safe.

The documentation for this class was generated from the following file: