🥝组件事件回调
LiteFlow支持了组件事件回调。目前支持的事件有2个,组件成功事件和失败事件。
# 成功事件
如果你在组件里覆盖了onSuccess
方法,那么组件成功后会回调这个方法。
@LiteflowComponent("a")
public class ACmp extends NodeComponent {
@Override
public void process() {
DefaultContext context = this.getContextBean(DefaultContext.class);
//do your biz
}
@Override
public void onSuccess() throws Exception {
DefaultContext context = this.getContextBean(DefaultContext.class);
//do your biz
}
}
在成功事件里,你可以通过同样的方法获取到上下文。
# 失败事件
如果你在组件中覆盖了onError
方法,那么组件发生异常后会回调这个方法。
@Component("d")
public class DCmp extends NodeComponent {
@Override
public void process() throws Exception{
//mock throw exception
throw new NullPointerException();
}
@Override
public void onError(Exception e) throws Exception {
DefaultContext context = this.getContextBean(DefaultContext.class);
//do your biz
}
}
# 注意点1
onError
方法执行后,因为主方法抛出异常,所以整个流程依旧是失败状态。response对象里依旧是主方法抛出的错。
# 注意点2
如果onError
方法本身抛错,那么最终抛到最外面的错,是主方法里的错,而onError
方法所产生的异常会被打出堆栈,但不会抛出。比如:
@Component("d")
public class DCmp extends NodeComponent {
@Override
public void process() throws Exception{
//mock throw exception
throw new NullPointerException();
}
@Override
public void onError(Exception e) throws Exception {
throw new IllegalAccessException("错误事件回调本身抛出异常");
}
}
那么最终response里的异常会是NullPointerException
而不是IllegalAccessException
,但是IllegalAccessException
这个异常会被打出堆栈信息。
# 注意点3
onError
方法执行后,afterProcess
方法还会执行吗(假设都有实现)?
会的,无论是否抛出错,afterProcess
方法都会被执行。
帮助我们改善此文档 (opens new window)
上次更新: 2023/08/04, 17:02:03