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

Posted

技术标签:

【中文标题】在反应式编程中无法访问第二个函数之外的变量【英文标题】:Not able to access variable outside of second function in reactive programming 【发布时间】:2019-10-09 16:20:06 【问题描述】:

我有 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 的属性”的错误。

【问题讨论】:

使用this.someFunction2.bind(this)。见***.com/q/20279484/9423231 【参考方案1】:

这是因为 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);

【讨论】:

【参考方案2】:

尝试更改箭头功能

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

【讨论】:

以上是关于在反应式编程中无法访问第二个函数之外的变量的主要内容,如果未能解决你的问题,请参考以下文章

发出警报后,我无法在我的反应本机应用程序中关闭我的键盘

使用 WebFlux 的反应式编程如何处理依赖的外部 api 调用

无法使用反应应用程序访问 sass 变量编译错误

为啥这个函数没有在反应中呈现

当用户对 2 个反应做出反应时,机器人不会读取第二个反应.. discord.py

具有多个对象回调的游戏循环 - 第二个对象没有任何反应