通过订阅从函数返回数据

时间:2017-01-18 21:24:01

标签: angular rxjs subscribe

getSchema(fileName): any {
    this.http.get(fileName)
        .map(this.extractData)
        .catch(this.handleError)
        .subscribe(data => {return data})
}

此函数返回undefined。如果使用console.log而不是return,则会记录填充的数据。 return使其无法等待数据响应。

我正在与观察者一起尝试,但它看起来像是不必要的代码。获取此代码的最简单方法是什么(从函数返回数据)?

2 个答案:

答案 0 :(得分:1)

我假设您想订阅组件中的某个位置?

所以这将是您的服务: 在这里,我假设您不从调用方法发送filename作为参数,但您知道服务中文件的位置。

getSchema(): any { 
    return this.http.get(fileName) 
        .map(this.extractData)
        .catch(this.handleError)
}

在您的组件中,您可以订阅:

this.myService.getSchema()
  .subscribe(data => {
    this.localVariable = data;
})

但是,请查看,例如

HTTP-tutorial

一般来说,我认为所有教程都非常适合学习基础知识:)

答案 1 :(得分:0)

我同意其他人您应该查看教程,并且应该在您的组件中而不是在您的服务中订阅。

然而,为了回答你的问题,你未定义的原因是因为你遗漏了return this.http.get(...);这应该是这样的。

getSchema(fileName): any {
    return this.http.get(fileName)
        .map(this.extractData)
        .catch(this.handleError)
        .subscribe(data => {return data})
}