# README
FutureChain
FutureChain implements a future-like inter-dependent pipeline using golang error group. It allows usage of the power which the Error Group package provides in safe conccurent functions with returned error.
Install
go get github.com/influx6/npkg/nchain
Example
- Sequential concurrent executions where one future is depent on the completion of another concurrent future operation.
chain := futurechain.NewFutureChain(context.Background(), func() error {
return nil
}).Go(func() error{
// This will be executed with the chain function concurrently using
// goroutines.
return nil
}).When(func() error {
// First dependent sequentail concurrent chain.
return nil
}).Go(func() error {
// We be executed concurrently with the sequential concurrent chain
// returned by Chain.When().
return nil
})
chain.Wait()
- Deferred future chains
This are cases where you can create a future which may be passed around to different functions which will be executed by another future not yet created or ready.
chain := futurechain.NewFutureChain(context.Background(), func() error {
// ....
return nil
})
// Deferred chain can be created, if will not be executed until another
// chain triggers it based on whatever method you use to chain.
chain2 := futurechain.DeferredChain(context.Background(), func() error {
// ....
return nil
})
// We want to trigger deffered chain regardless of error from first chain.
chain.ChainFuture(chain2)
chain2.Wait()
# Functions
DeferredChain returns an new Future where it's operation will not be started immediately but will be initiated by another completed Future chain.
NewFutureChain returns a new instance of a FutureChain using provided function.
NoWorkChain returns a new FutureChain which has returns nil immediately for it's work function.
# Structs
FutureChain implements a pure Future implementation which will lunch an operation in a go-routine but block till that operation finishes.