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

Posted

技术标签:

【中文标题】如何从订阅内部函数中获取价值?离子 3【英文标题】:How to get value from subscribe inside function? Ionic 3 【发布时间】:2018-12-22 04:50:52 【问题描述】:

我有这个函数,可以从 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】:

订阅是异步工作的。因此,console.log() 打印“未定义”是很正常的,因为 console.log() 在订阅返回值之前很久就得到处理。

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

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

你必须调用方法,那个过程

this.data 

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

【讨论】:

以上是关于如何从订阅内部函数中获取价值?离子 3的主要内容,如果未能解决你的问题,请参考以下文章

如何从函数内部更改全局变量的值?

如何从函数内部获取 JSON 数据并将其快速显示在文本字段上?

如何从 C 程序内部或使用内联汇编获取 C 函数的大小?

从离子中的警报中获取价值

如何从 Azure 函数内部发出基于承诺的 HTTP 发布请求 (NodeJS)?

从函数内部获取值jquery [duplicate]