Как передать необязательные аргументы в функции обратного вызова в машинописи - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть функция обратного вызова, которая возвращает некоторые данные компоненту.

export class AppComponent {
  constructor(
    private service: AppService
  ) {
    this.processSomething(true);
    this.processSomething(false);
  }

  private processSomething(isZoom: boolean = false) {
    this.service.handleAsyncResponses(
      this,
      this.processDataReceived
    );
  }

  private processDataReceived(
    attributeValueList: any,
    isZoom?: boolean
  ) {
    console.log("isZoom:", isZoom);
  }
}

Мне нужно отправить значение параметра isZoom из компонента и получить доступ к нему в console.log("isZoom:", isZoom). Теперь console.log является логином неопределенным.

Рабочий образец здесь: https://stackblitz.com/edit/angular-service-oqkfmf?file=app/app.component.ts

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я думаю, ты немного растерялся.

Я воспользовался свободой, чтобы очистить ваш стек от неиспользуемого кода и показать вам, как использовать обратные вызовы: вы можете проверить его там .

Начнем с компонента:

constructor(
  private service: AppService
) {
  this.processSomething(true);
  this.processSomething(false);
}

private processSomething(isZoom: boolean = false) {
  this.service.handleAsyncResponses(isZoom, this.processDataReceived);
}

private processDataReceived(isZoom: boolean) {
  console.log("isZoom:", isZoom);
}

Вам не нужно определять свои параметры как необязательные, поскольку вы присваиваете своему isZoom значению значение по умолчанию, что делает его всегда определенным.

Как видите, вам не нужно передавать ваш полный объект в качестве аргумента: функция может быть вызвана без него.

К вашим услугам, все, что вам осталось, это

public handleAsyncResponses(zoom: boolean, callback: Function) {
  callback(zoom);
}

Просто вызовите функцию, как в любом другом контексте. просто переименуйте this.processDataReceived(zoom) с именем параметра (здесь это callback).

Вот как обрабатываются обратные вызовы.

0 голосов
/ 05 сентября 2018

В вашем случае вам нужно обернуть вызов функции в локальное закрытие:

private processSomething(isZoom: boolean = false) {
    this.service.handleAsyncResponses(
        this, (attributeValueList: any) => {
            this.processDataReceived(attributeValueList, isZoom);
        }
    );
}

измененный пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...