Angular 2创建Observable以返回本地存储的数据

时间:2017-03-23 07:01:12

标签: angularjs angular return observable

我对angular 2很新,我有一点问题而且我没有找到另一个真正解决我的问题的线程并且有解决方案......

首先,我有一个管理数据的服务(epgService)。 我有第二个服务,它从数据库(apiService)加载数据并以Observable的形式返回数据。 我有一个组件,它想要数据。

现在组件要求epgService(服务1)获取一些数据。 然后epgService检查数据是否实际从服务器加载并在内部“缓存”。它不是,它要求apiService加载数据。

我的问题:我不知道,我如何从epgService返回一个Observable到组件。 在epgService中我是一个存储数据的变量。如果数据存在,变量将被填充。如果不是,则将数据从apiService加载为Observable,然后将observable的数据加载到局部变量中。 之后,在服务结束时,我想将局部变量作为Observable返回。 我怎么能这样做?

这是代码:

epgService:

getEPGbyChannel(channelID, mydate) {
        let epg: EPG = this.variables.getEPG();
        // local variable to store the data which then should be returned
        let returnEPG;
        // check if epg is there
        for (let channel of epg.epg) {
            if (channel.channelId === channelID) {
                for (let date of channel.dates) {
                    if (date === mydate) {
                       console.log("yeah, epg is there :)");
                       // return EPG
                       returnEPG = date;
                       return returnEPG.asObservable();
                    }
                }
            }
        }
        // load epg from database, because its not there
        if (!returnEPG) {
            console.log("epg is not there :(");
            let fromDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 0, 0, 0);
            let endDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 23, 59, 59);
            this.apiService.getChannelEPGbyTime(channelID, fromDate, endDate).
                subscribe(
                data => {
                    if (data.programme) {
                        console.log("got epg:");
                        console.log(data.programme);
                        // write data from observable in local variable
                        returnEPG = this.formatter.formatChannelEPG(data.programme);
                        return returnEPG.asObservable();
                    } else {
                        console.log("epg doesn´t exist on server");
                        returnEPG = "no epg";
                        return returnEPG.asObservable();
                    }
                });
        }
    }

组件:

this.epgService.getEPGbyChannel(channel.EPGID, date).
                subscribe(
                data => {
                    console.log("data!!!");
                    console.log(data);
                },
                //error => this.error = <any>error,
                error => {
                    this.variables.setFailure("Das EPG konnte nicht geladen werden.");
                    this.loading = false;
                });

这里的返回值是'returnEPG is undefined'。 有人能为我提供解决方案吗?

非常感谢!

0 个答案:

没有答案