【发布时间】:2018-12-18 11:46:09
【问题描述】:
帮助 Angular 5 Observables。
我想对控制器隐藏复杂性;也就是说,它不必订阅 observable。拥有服务中的所有复杂性,并让它简单地将结果/有效负载返回给组件。但显然我陷入了时间问题。我觉得这应该是一个流行的事情/话题,但还没有找到答案。所以也许我做错了什么?
//in the component.ts
const allColors = this.auth.getColors(); //service call
console.log(allColors); // returns undefined
//in the service.ts
getColors() {
var myColors = "";
var colors = this.http.get<any>('http://localhost/Account/GetColors', httpOptions)
.pipe(catchError(this.handleError));
//
colors.subscribe(
res => {
myColors = res.body;
},
error => {}
);
return myColors;
}
【问题讨论】:
-
您无法简化到这一点。服务应该返回 observable 本身。您可以在需要结果的地方订阅它,并在订阅回调中使用返回的值。
-
我认为拥抱 Observables 比绕过它们更好,因为它们是 Angular 工作方式不可或缺的一部分(以及其他原因)。当它实际上是一个异步过程时,您似乎正试图使其行为同步。
-
每次发出 http 请求时,您想要做的基本上都是阻止整个应用程序的执行。
-
请注意,您仍然可以隐藏一些复杂性,这样服务的用户就不必处理
http调用和res.body(借助@ 987654325@运营商)。
标签: angular observable