在Angular中从.subscribe中获取订阅数据

时间:2019-02-25 19:33:27

标签: angular typescript http nativescript angular-http

我想在订阅者被调用后返回事件。

git push some-remote HEAD:some-branch

上面的代码运行完美。它还返回JSON。

现在的问题是,当我在getCalendarEvents()中调用此方法时,由于函数不是无效的,我无法返回事件。因此,它应该具有返回类型。那么既然订阅是异步的,那么我将如何传递事件。

 getCalendarData(){
      var body = JSON.stringify({"cid": "etNG3V61LWS6Pzkeb_omuZGMVAOLd1_70tRQblVizWQ~",
      "seldt":"2018-09-18"}); 
      var headers = new HttpHeaders();
      headers.append('Content-Type', 'application/json');

      return this.httpClient.post(this.apiUrl, body, { headers: headers })

    }

1 个答案:

答案 0 :(得分:0)

您将需要像对待async函数一样对待它,因为确实如此。这有两种方法:

import { Observable, Subject } from 'rxjs';
import { map } from 'rxjs/operators';

getCalendarEvents(): Observable<Array<CalendarEvent>> {
  return this.getCalendarData().pipe(map((data: any) => {
    // Your parsing code...
    return events;
  }));
}

// or:

getCalendarEvents(): Observable<Array<CalendarEvent>> {
  const result: Subject<Array<CalendarEvent>> = new Subject<Array<CalendarEvent>>();
  this.getCalendarData().subscribe((data: any) => {
    // Your parsing code...
    result.next(events);
    result.complete();
  });
  return result;
}