package
0.8.9
Repository: https://github.com/influx6/npkg.git
Documentation: pkg.go.dev

# 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.