typescript - Reaktif programlamada ikinci fonksiyonun dışındaki değişkene erişemiyorum
2 Javascript fonksiyonum var. Birincisi, ikinciye değer döndürüyor. İkinci fonksiyonda, daha önce tanımlanan bir sabite erişemiyorum.
Sabitin adını değiştirmeyi denedim.
//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');
}
}
Çıktının 'constant1' olmasını bekliyorum. Ama 'constant1 özelliği okunamıyor' hatası alıyorum.
Cevap #1
Bunun nedeni, this'in çağrımı nedeniyle AppService'e bağlı olmamasıdır:
onModuleInit() {
this.someFunction1()
// You are passing someFunction2 as a function expression
.pipe(this.someFunction2)
.subscribe(console.log);
}
Bunun yerine, this'in leksikal olarak bağlandığı bir ok fonksiyonu olarak someFunction2'yi geçin, yani ok fonksiyonunun çağıranında this ne ise, ok fonksiyonu içinde de aynı olacaktır:
onModuleInit() {
this.someFunction1()
.pipe(something => this.someFunction2(something))
.subscribe(console.log);
}
Cevap #2
ok fonksiyonunu ok fonksiyonuna çevirmeyi dene
someFunction2=(something:Observable<string>):Observable<string> =>{
console.log('someFunction1');
console.log('constant1 = ', this.constant1);
// Cannot read property of constant1
return of('done');
}
