我的Angular 9应用程序中有一个方法如下:
createTitleHTMLText(calendarEventObject: CalendarEventObject): string {
this.translateService.get(calendarEventObject.calendarEventTyp).subscribe((res: string) => {
const title = '<span><b>' + calendarEventTyp + '</b></span>;
return title;
});
}
此方法应该返回一个字符串,但如何处理-要获得翻译,我需要一个Observable,而进一步的代码必须位于der Observable-result块中。 其实我不知道该怎么做-是否有一种方法可以同步Observable或最好的方法是什么?
答案 0 :(得分:0)
目前尚不清楚。您正在订阅HTTP请求,但未使用它的结果。 res
在这里的值是什么?尽管如此,我想您需要的是以下
createTitleHTMLText(calendarEventObject: CalendarEventObject): string {
this.translateService.get(calendarEventObject.calendarEventTyp).subscribe((res: string) => {
return '<span><b>' + res + '</b></span>';
});
}
答案 1 :(得分:0)
我在此示例中使用它:
fetchEvents(): void {
this.events$ = this.datechoiceService.getPreparedCalendarEventsOfUser(this.user.id, this.view, this.viewDate)
.pipe(
map(results => {
return results.map((calendarEventObject: CalendarEventObject) => {
let calendarEvent: CalendarEvent<{ calendarEvent: CalendarEvent<any>; }> = {
id: calendarEventObject.id,
actions: this.actions,
start: new Date(calendarEventObject.startsAt),
end: new Date(calendarEventObject.endsAt),
title: this.createTitleHTMLText(calendarEventObject),
...
};
return calendarEvent;
})
})
);
}
答案 2 :(得分:0)
您可以将可观察对象转换为Promise,也可以使用async / await,
async createTitleHTMLText(calendarEventObject: CalendarEventObject): string {
const calendarEventTyp = await this.translateService.get(calendarEventObject.calendarEventTyp).toPromise();
return '<span><b>' + calendarEventTyp + '</b></span>';
}
答案 3 :(得分:0)
如果我理解正确,您有一个Observable,它发出一个字符串,例如对远程服务的http调用,该服务返回(异步)字符串。在您的情况下,服务为this.translateService.get(calendarEventObject.calendarEventTyp)
。
然后有一个方法createTitleHTMLText(calendarEventObject: CalendarEventObject)
,该方法调用服务,并且您希望此方法返回异步服务发出的字符串。
如果这是您想要的,则根本无法实现。原因是该服务是异步的。
您可能想探索的是遵循这些思路的解决方案
createTitleHTMLText(calendarEventObject: CalendarEventObject): Observable<string> {
this.translateService.get(calendarEventObject.calendarEventTyp).pipe(
map((res: string) =>. '<span><b>' + calendarEventTyp + '</b></span>')
)
}
在此版本中,createTitleHTMLText
函数将Observable返回给感兴趣的任何人。实际上,可以使用Angular async
模板管道在需要的地方订阅此类Observable。