function.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. interface FunctionUseFunction {
  2. (this:LibMixins, item:TriggerData, index:number): any
  3. }
  4. interface FunctionUseAsyncFunction {
  5. (this:LibMixins, item:TriggerData, index:number): Promise<FunctionUseFunction>
  6. }
  7. type FunctionUseParams = string | FunctionUseFunction | FunctionUseAsyncFunction;
  8. export default class FunctionTrigger implements Trigger {
  9. constructor(private triggerFunction:FunctionUseParams){
  10. }
  11. trigger(item: TriggerData, index: number, target: LibMixins): void {
  12. if (typeof this.triggerFunction === 'string') {
  13. // @ts-ignore
  14. return target[this.triggerFunction](item,index);
  15. }
  16. // 执行
  17. let params:any = this.triggerTarget(this.triggerFunction,item,index,target);
  18. // 如果为异步触发
  19. if (params instanceof Promise) {
  20. params.then((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target)).catch((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target))
  21. }
  22. }
  23. triggerTarget(trigger:FunctionUseFunction, item: TriggerData, index: number, target: LibMixins):any{
  24. if (typeof trigger === 'function') {
  25. return trigger.call(target,item,index);
  26. }
  27. }
  28. }