Documentation ¶
Overview ¶
Package promise provides a complete promise and future implementation. A quick start sample:
fu := Start(func()(resp interface{}, err error){ resp, err = http.Get("http://example.com/") return })
//do somthing... resp, err := fu.Get()
Index ¶
- Constants
- Variables
- type AggregateError
- type CancelledError
- type Canceller
- type Future
- func (this *Future) Cancel() (e error)
- func (this *Future) Canceller() Canceller
- func (this *Future) Get() (val interface{}, err error)
- func (this *Future) GetChan() <-chan *PromiseResult
- func (this *Future) GetOrTimeout(mm uint) (val interface{}, err error, timout bool)
- func (this *Future) IsCancelled() bool
- func (this *Future) OnCancel(callback func()) *Future
- func (this *Future) OnComplete(callback func(v interface{})) *Future
- func (this *Future) OnFailure(callback func(v interface{})) *Future
- func (this *Future) OnSuccess(callback func(v interface{})) *Future
- func (this *Future) Pipe(callbacks ...interface{}) (result *Future, ok bool)
- func (this *Future) SetTimeout(mm int) *Future
- type NoMatchedError
- type Promise
- func (this *Promise) Cancel() (e error)
- func (this *Promise) OnCancel(callback func()) *Promise
- func (this *Promise) OnComplete(callback func(v interface{})) *Promise
- func (this *Promise) OnFailure(callback func(v interface{})) *Promise
- func (this *Promise) OnSuccess(callback func(v interface{})) *Promise
- func (this *Promise) Reject(err error) (e error)
- func (this *Promise) Resolve(v interface{}) (e error)
- type PromiseResult
Constants ¶
const ( CALLBACK_DONE callbackType = iota CALLBACK_FAIL CALLBACK_ALWAYS CALLBACK_CANCEL )
const ( RESULT_SUCCESS resultType = iota RESULT_FAILURE RESULT_CANCELLED )
Variables ¶
var (
CANCELLED error = &CancelledError{}
)
Functions ¶
This section is empty.
Types ¶
type AggregateError ¶
type AggregateError struct { InnerErrs []error // contains filtered or unexported fields }
AggregateError aggregate multi errors into an error
func (*AggregateError) Error ¶
func (e *AggregateError) Error() string
type CancelledError ¶
type CancelledError struct { }
CancelledError present the Future object is cancelled.
func (*CancelledError) Error ¶
func (e *CancelledError) Error() string
type Canceller ¶
type Canceller interface { IsCancelled() bool Cancel() }
Canceller is used to check if the future is cancelled It usually be passed to the future task function for future task function can check if the future is cancelled.
type Future ¶
type Future struct { Id int //Id can be used as identity of Future // contains filtered or unexported fields }
Future provides a read-only view of promise, the value is set by using Resolve, Reject and Cancel methods of related Promise
func Start ¶
Start start a goroutines to execute task function and return a Future that presents the result. If option paramter is true, the act function will be sync called. Type of act can be any of below four types:
func() (r interface{}, err error): if err returned by act != nil or panic error, then Future will be rejected with error, otherwise be resolved with r. func(): if act panic error, then Future will be rejected, otherwise be resolved with nil. func(c promise.Canceller) (r interface{}, err error): if err returned by act != nil or panic error, then Future will be rejected with err, otherwise be resolved with r. We can check c.IsCancelled() to decide whether need to exit act function func(promise.Canceller): if act panic error, then Future will be rejected with error, otherwise be resolved with nil. We can check c.IsCancelled() to decide whether need to exit act function. error: Future will be rejected with error immediately other value: Future will be resolved with value immediately
func WhenAll ¶
func WhenAll(acts ...interface{}) (fu *Future)
WhenAll receives function slice and returns a Future. If all Futures are resolved, this Future will be resolved and return results slice. Otherwise will rejected with results slice returned by all Futures Legit types of act are same with Start function
func WhenAny ¶
func WhenAny(acts ...interface{}) *Future
WhenAny returns a Future. If any Future is resolved, this Future will be resolved and return result of resolved Future. Otherwise will rejected with results slice returned by all Futures Legit types of act are same with Start function
func WhenAnyMatched ¶
WhenAnyMatched returns a Future. If any Future is resolved and match the predicate, this Future will be resolved and return result of resolved Future. If all Futures are cancelled, this Future will be cancelled. Otherwise will rejected with a NoMatchedError included results slice returned by all Futures Legit types of act are same with Start function
func Wrap ¶
func Wrap(value interface{}) *Future
Wrap return a Future that presents the wrapped value
func (*Future) Cancel ¶
Cancel sets the status of promise to RESULT_CANCELLED. If promise is cancelled, Get() will return nil and CANCELLED error. All callback functions will be not called if Promise is cancalled.
func (*Future) Get ¶
Get will block current goroutines until the Future is resolved/rejected/cancelled. If Future is resolved, value and nil will be returned If Future is rejected, nil and error will be returned. If Future is cancelled, nil and CANCELLED error will be returned.
func (*Future) GetChan ¶
func (this *Future) GetChan() <-chan *PromiseResult
GetChan returns a channel than can be used to receive result of Promise
func (*Future) GetOrTimeout ¶
GetOrTimeout is similar to Get(), but GetOrTimeout will not block after timeout. If GetOrTimeout returns with a timeout, timeout value will be true in return values. The unit of paramter is millisecond.
func (*Future) IsCancelled ¶
IsCancelled returns true if the promise is cancelled, otherwise false
func (*Future) OnCancel ¶
OnCancel registers a callback function that will be called when Promise is cancelled. If promise is already cancelled, the callback will immediately called.
func (*Future) OnComplete ¶
OnComplete register a callback function that will be called when Promise is rejected or resolved. If promise is already rejected or resolved, the callback will immediately called. According to the status of Promise, value or error will be paramter of Always callback function. Value is the paramter if Promise is resolved, or error is the paramter if Promise is rejected. Always callback will be not called if Promise be called.
func (*Future) OnFailure ¶
OnFailure registers a callback function that will be called when Promise is rejected. If promise is already rejected, the callback will immediately called. The error of Promise will be paramter of Fail callback function.
func (*Future) OnSuccess ¶
OnSuccess registers a callback function that will be called when Promise is resolved. If promise is already resolved, the callback will immediately called. The value of Promise will be paramter of Done callback function.
func (*Future) Pipe ¶
Pipe registers one or two functions that returns a Future, and returns a proxy of pipeline Future. First function will be called when Future is resolved, the returned Future will be as pipeline Future. Secondary function will be called when Futrue is rejected, the returned Future will be as pipeline Future.
func (*Future) SetTimeout ¶
SetTimeout sets the future task will be cancelled if future is not complete before time out
type NoMatchedError ¶
type NoMatchedError struct {
Results []interface{}
}
NoMatchedError presents no future that returns matched result in WhenAnyTrue function.
func (*NoMatchedError) Error ¶
func (e *NoMatchedError) Error() string
func (*NoMatchedError) HasError ¶
func (e *NoMatchedError) HasError() bool
type Promise ¶
type Promise struct {
*Future
}
Promise presents an object that acts as a proxy for a result. that is initially unknown, usually because the computation of its value is yet incomplete (refer to wikipedia). You can use Resolve/Reject/Cancel to set the final result of Promise. Future can return a read-only placeholder view of result.
func (*Promise) Cancel ¶
Cancel sets the status of promise to RESULT_CANCELLED. If promise is cancelled, Get() will return nil and CANCELLED error. All callback functions will be not called if Promise is cancalled.
func (*Promise) OnCancel ¶
OnCancel registers a callback function that will be called when Promise is cancelled. If promise is already cancelled, the callback will immediately called.
func (*Promise) OnComplete ¶
OnComplete register a callback function that will be called when Promise is rejected or resolved. If promise is already rejected or resolved, the callback will immediately called. According to the status of Promise, value or error will be paramter of Always callback function. Value is the paramter if Promise is resolved, or error is the paramter if Promise is rejected. Always callback will be not called if Promise be called.
func (*Promise) OnFailure ¶
OnFailure registers a callback function that will be called when Promise is rejected. If promise is already rejected, the callback will immediately called. The error of Promise will be paramter of Fail callback function.
func (*Promise) OnSuccess ¶
OnSuccess registers a callback function that will be called when Promise is resolved. If promise is already resolved, the callback will immediately called. The value of Promise will be paramter of Done callback function.
type PromiseResult ¶
type PromiseResult struct { Result interface{} //result of the Promise Typ resultType //success, failure, or cancelled? }
PromiseResult presents the result of a promise. If Typ is RESULT_SUCCESS, Result field will present the returned value of Future task. If Typ is RESULT_FAILURE, Result field will present a related error . If Typ is RESULT_CANCELLED, Result field will be null.