我有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');
}
}
我希望输出为“ constant1”。但是我收到“无法读取常量1的属性”的错误。
答案 0 :(得分:0)
尝试更改为箭头功能
someFunction2=(something:Observable<string>):Observable<string> =>{
console.log('someFunction1');
console.log('constant1 = ', this.constant1);
// Cannot read property of constant1
return of('done');
}
答案 1 :(得分:0)
这是因为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);
}