Typescript / Angular 5 - как убедиться, что параметр функции используется? - PullRequest
0 голосов
/ 27 августа 2018

Я пишу компонент с Angular 5 и Ionic 4.

Я хочу передать событие Refresher, чтобы скрыть счетчик обновления, когда пользователь обновляет функцию finally, чтобы скрыть счетчик.

Вот мой код:

export class UserInfoService {

    constructor(private employeeService: EmployeeService) {
        this.handleSuccess = this.handleSuccess.bind(this);
        this.processData = this.processData.bind(this);
        this.handleFinally = this.handleFinally.bind(this);
    }

    getEmployeeInfo(event?: Refresher) {

        // console.log(event);

        return this.employeeService
            .getEmployeeInfo()
            .map(this.handleSuccess)
            .finally(this.handleFinally);
            // .finally(() => {
            //     if (event != null) {
            //         console.log(' event ', event);
            //         event.complete();
            //     }
            // });
    }

    handleFinally() {
        console.log(' handle finally ', event);

        if (event != null) {
            console.log(' event ', event);
            event.complete();
        }
    }

Закомментированный код работает нормально, но было бы здорово не использовать анонимную функцию. После привязки его к конструктору, он обнаруживает другие события.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Необходимо указать значение event. Как насчет сделать его параметром handleFinally. Анонимная функция все еще необходима, но теперь она короче, что не снижает читабельность:

export class UserInfoService {
  constructor(private readonly employeeService: EmployeeService) {
      this.handleSuccess = this.handleSuccess.bind(this);
      this.processData = this.processData.bind(this);
  }

  getEmployeeInfo(event?: Refresher) {
      // console.log(event);

      return this.employeeService
          .getEmployeeInfo()
          .map(this.handleSuccess)
          .finally(() => this.handleFinally(event));

  }

  handleFinally(event?: Refresher) {
      console.log(' handle finally ', event);

      if (event) {
          console.log(' event ', event);
          event.complete();
      }
  }
}
0 голосов
/ 27 августа 2018

Вы все еще можете использовать функцию массива с переменной функции, как показано ниже:

export class UserInfoService {

  constructor(private employeeService: EmployeeService) {
      this.handleSuccess = this.handleSuccess.bind(this);
      this.processData = this.processData.bind(this);
  }

  getEmployeeInfo(event?: Refresher) {

      // console.log(event);

      return this.employeeService
          .getEmployeeInfo()
          .map(this.handleSuccess)
          .finally(this.handleFinally);

  }

  handleFinally = (event?: Refresher) => {
      console.log(' handle finally ', event);

      if (event != null) {
          console.log(' event ', event);
          event.complete();
      }
  }
}
...