角度2如何从订阅返回数据

新手上路,请多包涵

这就是我想要做的。

 @Component({
   selector: "data",
   template: "<h1>{{ getData() }}</h1>"
})

export class DataComponent{
    this.http.get(path).subscribe({
       res => return res;
    })
}

If getData was called inside the DataComponent , You may suggest assign it to a variable like this.data = res and use i like {{data}} I需要像 {{getData}} 用于我自己的目的。请建议我?

原文由 tsadkan yitbarek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

您不能直接返回该值,因为它是一个异步调用。异步调用意味着它在后台运行(实际上已安排为稍后执行),而您的代码继续执行。

您也不能直接在类中有这样的代码。它需要移动到方法或构造函数中。

您可以做的不是直接 subscribe() 而是使用像 map() 这样的运算符

export class DataComponent{
    someMethod() {
      return this.http.get(path).map(res => {
        return res.json();
      });
    }
}

此外,您可以将多个 .map 与相同的 Observable 组合起来,因为有时这可以提高代码清晰度并保持独立。例子:

 validateResponse = (response) => validate(response);

parseJson = (json) => JSON.parse(json);

fetchUnits() {
    return this.http.get(requestUrl).map(this.validateResponse).map(this.parseJson);
}

这样,调用者可以订阅的 observable 将返回

export class DataComponent{
    someMethod() {
      return this.http.get(path).map(res => {
        return res.json();
      });
    }

    otherMethod() {
      this.someMethod().subscribe(data => this.data = data);
    }
}

调用者也可以在另一个类中。这里只是为了简洁。

 data => this.data = data

res => return res.json()

是箭头函数。它们类似于正常功能。这些函数被传递给 subscribe(...)map(...) 以便在数据从响应中到达时从 observable 中调用。这就是为什么不能直接返回数据的原因,因为当 someMethod() 完成时,还没有收到数据。

原文由 Günter Zöchbauer 发布,翻译遵循 CC BY-SA 3.0 许可协议

将这个存储在一个可以在订阅之外使用的变量中怎么样?

 this.bindPlusService.getJSONCurrentRequestData(submission).map(data => {
    return delete JSON.parse(data)['$id'];
});

原文由 Julius 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题