首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从函数内部的订阅中获取值?离子3

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

Stack Overflow用户
提问于 2018-07-14 02:59:42
回答 1查看 973关注 0票数 0

我有一个从URL获取JSON文件的函数。现在我只需要一个随机的对象,它在那个文件中,看起来是this.data。但是,当尝试在.subscribe函数之外执行console.log(this.data)时,我得到了未定义的结果。要在函数的其余部分使用该值并将其返回给另一个函数,我需要做些什么?

下面是我的代码:

代码语言:javascript
复制
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
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-14 03:06:21

订阅以异步方式工作。因此,您的console.log()打印是很正常的,因为console.log()在订阅返回值之前很久就被处理了。

代码语言:javascript
复制
data.subscribe(result => {
     this.data = result;
     console.log('this.data: ', this.data);

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

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

代码语言:javascript
复制
this.data 

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51331342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档