Могу ли я передать внешнюю функцию Rx Js subscribe? - PullRequest
0 голосов
/ 06 августа 2020

Если я проверю метод подписки Rx JS, я вижу, что:

    subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;

поэтому я пишу пример функции инициализации следующим образом:

  private init(): void{
this.dataBaseService.fetchPersons().subscribe(
   (persons: Person[]) => {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
  },
  error => console.error(error),
  () => console.log('Complete!')
);

}

требуется ли в Typescript предоставлять лямбда-функцию для аргумента? Могу ли я создать функцию в другом месте и предоставить ее в качестве аргумента?

например, эту функцию:

       (persons: Person[]) => {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
  }

создать в верхнем классе, а затем предоставить ее в качестве аргумента.

Хорошо поэтому я попытался создать метод внутри класса:

  someFunction( persons: Person[] ){
this.behaviorSubject.next(persons);
this.subject.next(persons);

}

и попытался передать его функции инициализации

    private init2(): void {
  this.dataBaseService.fetchPersons().subscribe(
    this.someFunction(),
    error => void,
    () => console.log('Complete!');
  )
}

И я получаю сообщение об ошибке:

An argument for 'persons' was not provided.

Какой аргумент я должен предоставить, если его инициализация этого верхнего метода?

1 Ответ

2 голосов
/ 06 августа 2020

Вам нужно передать свою функцию без (), иначе она сразу же будет вызвана:

someFunction( persons: Person[]) {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
}
    
private init2(): void {
    this.dataBaseService.fetchPersons().subscribe(
        this.someFunction, // <- pass it without ()
        error => void,
        () => console.log('Complete!')
    )
}
    
...