TypeScript全局变量在Observable订阅方法中未更改

时间:2017-03-29 08:17:51

标签: angular typescript rxjs

我正在尝试使用rxJS来处理来自angular2

中的http请求的响应

这是代码:

isUserConfirmed(): boolean {
    let result: boolean = false;
    this.authService.isUserConfirmed().subscribe(
      retrievedData => {
        //if no errors from the server
        if (retrievedData.success) {
          //if the confirmed flag is true
          if (retrievedData.payload){
            result = true;
            console.log("i"+result);
          } else {
            result = false;

          }
        } else {
          this.showError(retrievedData.message);
        }
      },
      error => {
        this.showError(error);
      });
      console.log("o"+result);
      return result;
  },

showError(error) {
  //...
}

编辑

当我运行它时,我得到了这个输出:

ofalse
itrue

这意味着在suscribe方法中结果值设置为true,但这不会更改返回的结果值 如何设置从订阅块内部返回值集?

1 个答案:

答案 0 :(得分:1)

因为订阅块之外的控制台语句将首先执行。所以你的第一个console.log()将显示false。在订阅块内的console.log()之后将执行第二个。如果成功,它将成为现实。

如果Observable返回true,则结果应为:

isUserConfirmed(): boolean {
    let result: boolean = false;
    return this.authService.isUserConfirmed().subscribe(
      retrievedData => {
        //if no errors from the server
        if (retrievedData.success) {
          //if the confirmed flag is true
          if (retrievedData.payload){
            result = true;
            console.log("i"+result);
          }
        } else {
          this.showError(retrievedData.message);
        }
        return result
      },
      error => {
        this.showError(error);
      });
  }

您可以通过这种方式返回值

y_size