我从 Angular (7) 应用程序中的 firebase 云函数获取全日历事件,如下所示:
eventSources: [
{
events: (info, successCallback, failureCallback) => {
this.http
.get(
BACKEND_URI + '?start=' + info.start + '&end=' + info.end
)
.subscribe((events: CalendarEvent[]) => {
localStorage.setItem('CalendarEventStore', JSON.stringify(events));
successCallback(events);
}, error => {
console.error(error);
failureCallback(error);
});
}
}
],
(我使用自己的 get 函数主要是通过拦截器添加授权标头)。
如您所见,我将收到的事件保存在 localStorage 中,以便下次请求日历时可以使用它们。这主要是在没有互联网连接的情况下,因为它应该可以用作 PWA,而且 firebase 云功能似乎非常慢,因此在加载新事件时显示存储中的事件会很好。加载保存的事件会出现问题。我尝试将它们作为第二个事件源添加,如下所示:
eventSources: [
{
// code above..
},
{
events: JSON.parse(localStorage.getItem('CalendarEventStore')) || {}
},
],
这个想法是在第一个回调后立即删除第二个 eventSource,这样就不会重复了。但是第二个 eventSource 只会在第一个完成后立即显示,此时所有的 successCallbacks 都已完成,因此这里没有节省时间。
因为这似乎是很多人可能面临的一个非常基本的问题:有没有人对如何实现它有想法/解决方案?