У меня будет служба angular с функцией getTimeLinePosts
для получения JSON с сервера. В компоненте timeline-page.ts я подпишусь на эту функцию. При отправке запроса на сервер мне нужно отправить дату предыдущего кэшированного ответа (используя ionic cache), чтобы проверить наличие новых данных. Проблема в том, что const date
возвращает обещание вместо значения. Я не могу использовать async getTimeLinePosts
из-за подписки в файле timeline-page.ts. Предложения, как я могу дождаться даты, прежде чем вернуть loadFromDelayedObservable
?
- timeline-service.ts
getTimelinePosts(
limit: number = 25,
offset: number = 0,
type: string = "",
group: number = null
) {
let cacheKey = `api/timeline?l=${limit}&o=${offset}&t=${type}&g=${group}`;
// How wait for this value before fire request
const date = this.getCachedItem(cacheKey);
let request = this.http.post(cacheKey, { headers: HEADER.headers , params: JSON.stringify({ dateUpdated: date }) } );
let groupKey = "timeline";
let ttl = 60 * 60 * 1;
let delayType = "none";
return this.cache
.loadFromDelayedObservable(url, request, groupKey, ttl, delayType)
.pipe(map((result) => result));
}
async getCachedItem(cacheKey){
let data = await this.cache.getItem(cacheKey)
.catch(() => {
console.log("Oh no! My promise is expired or doesn't exist!");
});
return await data.data.dateUpdated;
}
- временная шкала-page.ts
this.TimelineService.getTimelinePosts(limit, offset, type, group).subscribe(
(data) => {
this.setTimelineData(data);
}
);