主要用于校验:
class Handler{
handlerFn=null
nextHandler = null
id = undefined
preHandler = null
name = undefined
lastHandlre = null
constructor(id,handlerFn,name){
this.id = id
this.handlerFn = handlerFn
this.name = name
}
setNextHandler(handler) {
if(!(handler instanceof Handler)){
throw new Error('请传入一个handler')
}
if(this.id!==handler.id){
throw new Error('请传入同一个id的handler')
}
let lastHandlre = this
let isMarkHandler = null
do{
isMarkHandler = lastHandlre
lastHandlre = lastHandlre.nextHandler
}while(lastHandlre)
isMarkHandler.nextHandler = handler
handler.preHandler = isMarkHandler
return this
}
run(args){
let nextHandler = this
let result = args
try {
while(nextHandler){
console.log('nextHandler.handlerFn',nextHandler)
result = nextHandler.handlerFn(result)
if(result===false){
throw new Error(false)
}
nextHandler = nextHandler.nextHandler
}
} catch (error) {
console.log('校验失败',error)
return false
}
return result
}
remove(){
if( this.preHandler){
this.preHandler.nextHandler = this.nextHandler
this.nextHandler.preHandler = this.preHandler
}else{
window.__beforeSubmit_Handler_Case = window.__beforeSubmit_Handler_Case.nextHandler
}
}
}
window.__beforeSubmit_Handler = Handler
//共识:第一个实例
window.__beforeSubmit_Handler_Case = null
export function createCheckBeforeSubmit(id,handlerFn,name) {
const _case = new Handler(id,handlerFn,name)
if(!window.__beforeSubmit_Handler_Case){
window.__beforeSubmit_Handler_Case = _case
}else{
window.__beforeSubmit_Handler_Case.setNextHandler(_case)
}
return _case
}