Невозможно получить доступ к переменной вне второй функции в реактивном программировании - PullRequest
1 голос
/ 23 мая 2019

У меня есть 2 функции Javascript.Первый возвращает значение второму.Во второй функции я не могу получить доступ к объявленной ранее константе.

Я попытался переименовать константу.

//app.service.ts

import { Injectable, OnModuleInit } from '@nestjs/common';
import { Observable, of } from 'rxjs';

@Injectable()

export class AppService implements OnModuleInit {

  constant1 = 'constant1';

  onModuleInit() {
    this.someFunction1()
    .pipe(
      this.someFunction2,
    ).subscribe(console.log);
  }

  private someFunction1(): Observable<string> {
    console.log('someFunction1');
    console.log('constant1 = ', this.constant1);
    return of('done');
  }

  private someFunction2(something:Observable<string>):Observable<string> {
    console.log('someFunction1');
    console.log('constant1 = ', this.constant1); 
    // Cannot read property of constant1
    return of('done');
  }

}

Я ожидаю, что на выходе будет «константа1».Но я получаю сообщение об ошибке «не могу прочитать свойство constant1.»

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Это потому, что this не связан с AppService из-за его вызова:

onModuleInit() {
  this.someFunction1()
    // You are passing someFunction2 as a function expression
    .pipe(this.someFunction2)
    .subscribe(console.log);
}

Вместо этого передайте someFunction2 как функцию стрелки, где this лексически связан, означая, что независимо от того, this для вызывающей функции стрелки, оно будет одинаковым в функции стрелки:

onModuleInit() {
  this.someFunction1()
    .pipe(something => this.someFunction2(something))
    .subscribe(console.log);
}
0 голосов
/ 23 мая 2019

попробуйте перейти к функции стрелки

  someFunction2=(something:Observable<string>):Observable<string> =>{
    console.log('someFunction1');
    console.log('constant1 = ', this.constant1); 
    // Cannot read property of constant1
    return of('done');
  }
...