订阅可观察价值

时间:2016-07-06 10:11:07

标签: typescript angular observable

当我在订阅中记录我的变量值时,我有一个值但是在外面做它时我得到了未定义的???:

this._postService.getConf("app/conf/conf.json")
   .subscribe(res =>{
      this.home = JSON.stringify(res);
      console.log("value :" + this.home);

我想用一定的值初始化我的home变量我正在ngOnInit上做这个但是当我试图把它弄到外面时它得到的值是未定义的:

这是我的功能:

getConf(url) {
   return this._http.get(url).
      map(res => {return res.json()});
}

ngOnInit() {

  this._postService.getConf("app/conf/conf.json")
   .subscribe(res => {
        this.home = JSON.stringify(res);
        console.log("hahowaaaaaaaa" + this.home);
   }
  );

  this._postService.getPosts(this.home)
  .subscribe(result =>{ 
    this.loading = false;
    this.actionsG = result; 
    var count = JSON.stringify(result);

    this.aCount = count.substring(count.indexOf(','),23);

  },error=> console.error('Error: ' + error), ()=> console.log('finish! ActionsG'));

  this._postService.getPosts(this.home ).subscribe(result => this.actionsV = 
    result, error=> console.error('Error: ' + error), ()=> console.log('finish! ActionsV ngOnInit' + this.page));
}

2 个答案:

答案 0 :(得分:5)

观察者的工作方式。当来自服务器的响应到达时,传递给subscribe(...)的回调由observable调用。

console.log()之外的subscribe()在执行服务器调用之前执行。

答案 1 :(得分:3)

我的ngOnInit()调用了一个从数据库中获取数据的进程。 我希望在调用之后,方法中更新的this.##变量可用。如上所述,调用传递给observable,这意味着变量在ngOnInit()中不可用。但是当显示HTML页面时,它们都被填充。

所以解决方案是在方法中完成所有必要的工作,然后引用将用HTML填充的变量。

this.service.getCity(zip).subscribe(
    data => {
        if (data.errStatus == 0) {
            console.log("data: " +   data.xx.List);

            this.xx.List = data.xx.List;
            console.log("data2: " + this.xxList);
        } else {
            data.errText;
            console.log(data.errText);
        }
    },
    err => console.error(err),
    () => console.log('done')
);