装饰器应用

作者: Gary嘉骏 | 来源:发表于2018-08-08 17:06 被阅读1次

前言

在公司采用我的angular后台方案后,除业务代码外,我就一直在维护及扩展一个增删改查的可配置组件,很多方法都需要相当的灵活性,如灵活的格式化管道,灵活的排序方法,灵活的验证器。这里面就涉及了很多的方法公用,特别有时逻辑是一样的,但需要的返回类型不一样(Promise\Observabvle)。然后就发现此时装饰器有大用处了。

把函数结果转换成Observable类型

  • target 是构造函数,注意不是实例
  • key 是方法名
  • descriptor 解析器,value对象就是要装饰的函数
import { of, Observable, isObservable } from 'rxjs';

function ResultToObservable(target: any, key: string, descriptor: any) {
  const originalMethod = descriptor.value;
  const newMethod = function(...args: any[]): any {
    const result: any = originalMethod.apply(this, args);
    if (isObservable(result)) {
      return result;
    } else if (result instanceof Promise) {
      return new Observable<any>(ob => {
        result
          .then(_ => {
            ob.next(_);
            ob.complete();
          })
          .catch(e => ob.error(e));
      });
    } else {
      return of(result);
    }
  };
  descriptor.value = newMethod;
}

这样就可以简单的共用函数了

@ResultToObservable
getObservable(){
  return anyFn()
}

相关文章

  • TypeScript基础入门之装饰器(二)

    转发 TypeScript基础入门之装饰器(二) 装饰器求值 如何应用装饰器应用于类内的各种声明的顺序: 对每个实...

  • TypeScript——装饰器(二)

    装饰器求值 类中不同声明上的装饰器将按以下规定的顺序应用: 参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性...

  • 装饰器应用

    前言 在公司采用我的angular后台方案后,除业务代码外,我就一直在维护及扩展一个增删改查的可配置组件,很多方法...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • Python装饰器小谈

    近几日再次研究Python装饰器,对装饰器又有了新的理解和应用。如果这篇文章叫做小谈装饰器,不如重谈装饰器更来得亲...

  • TypeScript——装饰器(三)

    访问器装饰器 访问器装饰器声明在一个访问器的声明之前(紧靠着访问器声明)。 访问器装饰器应用于访问器的 属性描述符...

  • TypeScript——装饰器(四)

    参数装饰器 参数装饰器声明在一个参数声明之前(紧靠着参数声明)。 参数装饰器应用于类构造函数或方法声明。 参数装饰...

  • python装饰器在接口自动化测试中的应用

    在讲解装饰器在接口自动化测试项目的应用之前,我们先来介绍一下python装饰器到底是个什么 装饰器 说装饰器就不得...

  • Python装饰器9-函数装饰器的应用

    函数装饰器应用场景-权限验证 执行结果: 小结 Python装饰器在Flask中一个典型的应用场景就是权限验证

  • 装饰器的应用

    身份认证 authenticate 日志记录 输入合理性检查 validation_check 缓存 lru_ca...

网友评论

    本文标题:装饰器应用

    本文链接:https://www.haomeiwen.com/subject/skyxbftx.html