gpt4 book ai didi

angular - 从 Angular 中的 .subscribe 获取订阅数据

转载 作者:可可西里 更新时间:2023-11-01 17:17:25 24 4
gpt4 key购买 nike

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

 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 })

}

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

现在的问题是,当我在 getCalendarEvents() 中调用此方法时,我未能返回事件,因为该函数并非无效。所以它应该有一个返回类型。那么我将如何传递事件,因为订阅是异步的。

 getCalendarEvents(): Array<CalendarEvent> {
var listCal:any = []
this.getCalendarData().subscribe((data: any) => {
listCal = data;
console.log('listCal data: ', listCal);

let startDate: Date,
endDate: Date,
event: CalendarEvent;
let colors: Array<Color> = [new Color(200, 188, 26, 214), new Color(220, 255, 109, 130), new Color(255, 55, 45, 255), new Color(199, 17, 227, 10), new Color(255, 255, 54, 3)];
let events: Array<CalendarEvent> = new Array<CalendarEvent>();
for (let i = 1; i < listCal.length; i++) {
event = new CalendarEvent(listCal[i].title, new Date(listCal[i].date), new Date(listCal[i].date), false, colors[i * 10 % (listCal[i].colour.length - 1)]);

events.push(event);
}
//console.log(events);
return events;
}
);

//return events; HERE the events has no data because I am outside the .subscribe!
}

最佳答案

您需要将其视为 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;
}

关于angular - 从 Angular 中的 .subscribe 获取订阅数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com