Typescript 在反应式编程中,无法访问第二个函数之外的变量

Typescript 在反应式编程中,无法访问第二个函数之外的变量,typescript,rxjs,nestjs,Typescript,Rxjs,Nestjs,我有两个Javascript函数。第一个将值返回给第二个。在第二个函数中,我无法访问前面声明的常量 我已尝试重命名该常量 //app.service.ts import { Injectable, OnModuleInit } from '@nestjs/common'; import { Observable, of } from 'rxjs'; @Injectable() export class AppService implements OnModuleInit { cons

我有两个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');
  }

}
//app.service.ts
从'@nestjs/common'导入{Injectable,OnModuleInit};
从'rxjs'导入{可观察的};
@可注射()
导出类AppService实现OnModuleInit{
constant1=‘constant1’;
onModuleInit(){
this.someFunction1()
.烟斗(
这个,这个功能,,
).subscribe(console.log);
}
私有someFunction1():可观察{
log('someFunction1');
log('constant1=',this.constant1);
返回(“完成”);
}
私人的某物功能2(某物:可观察的):可观察的{
log('someFunction1');
log('constant1=',this.constant1);
//无法读取constant1的属性
返回(“完成”);
}
}

我希望输出是“constant1”。但我得到一个错误“无法读取constant1的属性”。

尝试更改为arrow函数

  someFunction2=(something:Observable<string>):Observable<string> =>{
    console.log('someFunction1');
    console.log('constant1 = ', this.constant1); 
    // Cannot read property of constant1
    return of('done');
  }
someFunction2=(某物:可观察的):可观察的=>{
log('someFunction1');
log('constant1=',this.constant1);
//无法读取constant1的属性
返回(“完成”);
}

尝试更改箭头功能

  someFunction2=(something:Observable<string>):Observable<string> =>{
    console.log('someFunction1');
    console.log('constant1 = ', this.constant1); 
    // Cannot read property of constant1
    return of('done');
  }
someFunction2=(某物:可观察的):可观察的=>{
log('someFunction1');
log('constant1=',this.constant1);
//无法读取constant1的属性
返回(“完成”);
}

这是因为
未绑定到
应用服务
,因为其调用:

onModuleInit() {
  this.someFunction1()
    // You are passing someFunction2 as a function expression
    .pipe(this.someFunction2)
    .subscribe(console.log);
}
相反,将
someFunction2
作为箭头函数传递,其中
是词汇绑定的,这意味着无论
用于箭头函数的调用者,它在箭头函数中都是相同的:

onModuleInit() {
  this.someFunction1()
    .pipe(something => this.someFunction2(something))
    .subscribe(console.log);
}

这是因为
未绑定到
AppService
,因为其调用:

onModuleInit() {
  this.someFunction1()
    // You are passing someFunction2 as a function expression
    .pipe(this.someFunction2)
    .subscribe(console.log);
}
相反,将
someFunction2
作为箭头函数传递,其中
是词汇绑定的,这意味着无论
用于箭头函数的调用者,它在箭头函数中都是相同的:

onModuleInit() {
  this.someFunction1()
    .pipe(something => this.someFunction2(something))
    .subscribe(console.log);
}

使用
this.someFunction2.bind(this)
。请参阅使用
this.someFunction2.bind(this)
。看见