Angular-RxJS-可观察和方法返回

时间:2020-03-21 06:26:38

标签: angular methods rxjs

我的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或最好的方法是什么?

4 个答案:

答案 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。