如何从内部订阅函数中获取价值?离子3

时间:2018-07-13 18:59:42

标签: angular typescript ionic3

我具有此功能,可以从URL获取JSON文件。 现在,我只需要该文件中似乎是this.data的随机对象。 但是当尝试在.subscribe函数之外进行console.log(this.data)时,我无法定义。我需要在其余函数中使用该值并将其返回给另一个函数吗?

这是我的代码:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';


/*
  Generated class for the AdsProvider provider.

  See https://angular.io/guide/dependency-injection for more info on providers
  and Angular DI.
*/
@Injectable()
export class AdsProvider {
    adsUrl: string;
  constructor(public http: HttpClient) {
    console.log('Hello AdsProvider Provider');
  }
  getAds() {
    this.adsUrl = 'an url';
    console.log(this.adsUrl);
    console.log('I can get ads');
    // Nu vraag je de file van de server
    let data: Observable<any> = this.http.get(this.adsUrl);

    data.subscribe(result => {
      this.data = result;
      // Nu heb je de JSON file met de advertenties
    });
   console.log(this.data); // this gives me undefined
  }
}

1 个答案:

答案 0 :(得分:0)

订阅异步工作。因此,在订阅返回值很久之前,console.log()会被处理,这是很正常的。

DataFrame

您必须调用该过程的方法

data.subscribe(result => {
     this.data = result;
     console.log('this.data: ', this.data);

    // call methods that work with this.data from here
});

,来自订阅内部。这是Angular中的常用方法。您等待订阅中的值,并在提供后立即使用它。