如何从Observer返回值?
问题描述:
我有以下功能:如何从Observer返回值?
private getTranslateMenuItem(key: string): string {
this.translate.get(key).subscribe((res: string) => {
return res;
});
}
我需要它返回我SRING数据时,我把这种喜欢:
let title = this.getTranslateMenuItem('pop');
答
而是试图返回被观察到发射的价值,尝试只需返回Observable并允许消费者利用发射值,如设置类属性:
服务:
public getTranslateMenuItem(key: string): Observable<string> {
return this.translate.get(key);
}
组件:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '{{title}}'
})
export class AppComponent {
title: string;
constructor(private someService: SomeService) {}
ngOnInit(): void {
this.someService.getTranslateMenuItem('foobar')
.subscribe(
value => this.title = value,
error => console.log(error),
complete => console.log('Completed');
);
}
}
这种方法,你会处理值,错误和完整的组件,并允许根据需要将服务只是处理检索和处理/格式化值。
或者,您可以使用组件模板中的async管道来订阅/取消订阅发出的值。
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '{{title$ | async}}'
})
export class AppComponent {
title$: Observable<string>;
constructor(private someService: SomeService) {}
ngOnInit(): void {
this.title$ = this.someService.getTranslateMenuItem('foobar');
}
}
希望有帮助!
不要返回值,而是返回observable并允许消费者根据需要订阅(next,error,complete)来设置组件属性,处理错误等。如果您需要使用其他可观察值动作操作符如switchMap或mergeMap可以帮助实现这一点。 –
你有没有这样建议:'private getTranslateMenuItem(key:string):Observable {}'? –
user3573738