Rxjs Angular2:想要了解下面代码的作用

时间:2017-02-27 06:08:12

标签: angular rxjs

我正在学习Angular2。我正在学习编程课程之一,我在练习文件中遇到了以下代码。我很难理解语句" .do(this.toggleLogState.bind(this));" 是什么意思? 如果有人可以解释它会非常有用。提前谢谢。

请找到以下代码

@Injectable()
export class LoginService {
  constructor(
    private spinnerService: SpinnerService,
    private userProfileService: UserProfileService) { }

  login() {
    return Observable.of(true)
        .do(_ => this.spinnerService.show())
        .delay(1000)
        .do(this.toggleLogState.bind(this)); // don't understand what this statement will do
  }

  logout() {
    this.toggleLogState(false);
  }

  private toggleLogState(val: boolean) {
    this.userProfileService.isLoggedIn = val;
    this.spinnerService.hide();
  }
}

1 个答案:

答案 0 :(得分:3)

.do(this.toggleLogState.bind(this))

这实际上与

相同
.do(v => this.toggleLogState(v));

lambda表达式使this中的toggleLogState成为此类的实例,这也是.bind(this)的作用。

bind还确保将任何参数传递给给定方法。在这种情况下,参数来自可观察的。 Observable.of(true)以布尔值true开头。 do(...)delay(...)始终传递传递给它们的相同参数值。所以在这个链的末尾,你首先要传递的是你开始的true