frouter

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 18, 2023 License: Apache-2.0 Imports: 1 Imported by: 0

README

FUNCTION ROUTER

介绍

FUNCTION ROUTER用于定义一系列可同步或异步执行的函数链,不同的函数执行链根据注册时的key值区分,每个函数都有其相应的回滚函数。

回滚

当函数链为同步函数链时,如果执行某个函数产生error,那么会中断此函数链,并且已经执行过的所有函数的回滚函数都会被执行。

当函数链为异步函数链时,执行某个函数产生error并不会中断函数链后续执行,当函数链中的所有函数都执行完毕后产生了error的函数的回滚函数会被依次执行。

例如定义了以下函数链(括号中为函数对应的回滚函数):

A(Arb) - B(Brb) - C(Crb) - D(Drb) - E(Erb)

函数链的正常执行流程:A - B - C - D - E

当函数链为同步函数链时,执行C产生error,那么执行流程为:A - B - C - Crb - Brb - Arb

当函数链为异步函数链时,执行C产生error,那么执行流程为:A - B - C - D - E - Crb 当函数链为异步函数链时,执行C、E产生error,那么执行流程为:A - B - C - D - E - Crb - Erb

常用函数

RegisterSync(key string, syncFunc func(instance T) error, rollback func(instance T))

注册同步函数及其回滚函数到相应的key中

RegisterAsync(key string, asyncFunc func(instance T) error, rollback func(instance T))

注册异步函数及其回滚函数到相应的key中

Sync(key string, instance T) error

执行key值对应的同步函数链,当某个函数执行产生error,则中断执行,并返回error

Async(key string, instance T)

执行key值对应的异步函数链

Documentation

Index

Constants

View Source
const (
	Init   = "init"
	Add    = "add"
	Update = "update"
	Delete = "delete"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Router

type Router[Data any] struct {
	// contains filtered or unexported fields
}

func New

func New[Data any]() *Router[Data]

func (*Router[Data]) Async

func (s *Router[Data]) Async(key string, instance Data)

func (*Router[Data]) RegisterAfterAsync

func (s *Router[Data]) RegisterAfterAsync(afterFunc func(instance Data) error)

func (*Router[Data]) RegisterAfterSync

func (s *Router[Data]) RegisterAfterSync(afterFunc func(instance Data) error)

func (*Router[Data]) RegisterAsync

func (s *Router[Data]) RegisterAsync(key string, asyncFunc func(instance Data) error, rollback func(instance Data))

func (*Router[Data]) RegisterPreAsync

func (s *Router[Data]) RegisterPreAsync(preFunc func(instance Data) error)

func (*Router[Data]) RegisterPreSync

func (s *Router[Data]) RegisterPreSync(preFunc func(instance Data) error)

func (*Router[Data]) RegisterSync

func (s *Router[Data]) RegisterSync(key string, syncFunc func(instance Data) error, rollback func(instance Data))

func (*Router[Data]) SetDelay

func (s *Router[Data]) SetDelay(delay time.Duration)

func (*Router[Data]) Start

func (s *Router[Data]) Start()

func (*Router[Data]) Stop

func (s *Router[Data]) Stop()

func (*Router[Data]) Sync

func (s *Router[Data]) Sync(key string, instance Data) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL