首页 文章

在subscribe中初始化变量总是未定义Angular rxjs

提问于
浏览
0

我是angular2 typescript和rxjs以及observables的新手 .

我正在尝试使用此代码从api获取信息

let Alertsanswer = this.LogService.getAlertsForClient(this.userId);
    var a = Alertsanswer.subscribe((response) => {
       this.alerts=JSON.parse(response)
console.log(this.alerts) //give the right response.
    },
      error => {
        var err = error;

        alert(err);
      }
    )

你可以在订阅中看到我初始化一个私有变量:“this.alerts”

在subscribe之外,这个变量有未定义的值console.log(this.alerts)//给出undefined .

在组件doom中使用this.alert也是未定义的,这会给出错误:

<div>{{alerts}}</div>

第一个问题:为什么“”订阅中的this.alerts为控制台提供正确的值,但外部(包括厄运)始终未定义 .

第二个问题:我理解来自服务器的值是异步的,如果我有更多的代码继续回答我在哪里写它(回调),它会在订阅内吗? subscribe是什么意思?谢谢你的帮助

2 回答

  • 1

    对于你的第一个问题, this.alertssubscribe finish 之后得到正确的值(从api获取数据),在完成之前使用 this.alerts 将不会给出正确的值 . 您应该使用 <div *ngIf="alerts">{{alerts}}</div> 来确保数据可以使用 . 例如,在订阅完成之前,使用 <div>{{alerts.property}}</div> 将引发错误 . console.log 也是同样的道理 .

    对于你的第二个,使用:

    this.LogService.getAlertsForClient(this.userId)
    .subscribe(response => this.alerts = JSON.parse(response),
    ()=>console.log('error'),
    ()=>yourFuncRelayOnTheResponse(this.alerts));
    
  • 0

    嘿,你通过将服务分配给变量来做一些不稳定的事情 . 编辑了一些代码,向您展示我将如何定义:

    export class LoginComponent
    {
        private alerts; //This needs to be defined here on the class first
    
        constructor(public loginService: LoginService)
        {
        }
    
        ngOnInit()
        {
            this.LogService
                .getAlertsForClient(this.userId)
                .subscribe(response =>
                    {
                        this.alerts = JSON.parse(response); // Assign response to class member alerts.
                    },
                    error=>
                    {
                        console.log(error);
                    })
        }
    }
    

相关问题