Angular - Ionic 2 - 无法读取未定义的属性'subscribe'

时间:2017-08-11 06:23:45

标签: angular ionic2

我正在尝试实现离线模式,我做过类似的事情。

在我的Page.ts文件

getnews() {

        this._newsservice.GetNews(this.NewsFilterOptions).subscribe(res => {
            this.newsArray = res;
            this.loadingnews = false;
        },
            err => {
                this.loadingnews = false;
            },
            () => {

            });
    }

在我的Service档案

GetNews(FilterOptions: any) {
        return this.utilitiesService.Get("news" + this.QueryBuilder(FilterOptions));
    }

我的Utilities档案

public Get(endUrl: string) :Observable<any> { 

        if (this._AppConfig.IsOnline) { // If Online Get From Server
            ...
            return this.http.get(this.baseUrl + endUrl, options)
                .map(response => {
                    //SAVE HTTP RESPONSE TO DICTIONARY
                    this._OfflineService.Set(this.baseUrl + endUrl, response);
                    return response.json()
                });
        }
        else {

            this._OfflineService.Get(this.baseUrl + endUrl).then(val => {
                return Observable.of(val).map(o => o.json());
            }).catch((err) => {
                return Observable.throw("ERROR");
            });


            // FETCH HTTP RESPONSE FROM DICTIONARY
            //return Observable.of(Data).map(o => o);

        }


    }

离线Service:我正在使用Ionic LocalStorage

 Get(endUrl: string) {

    // Or to get a key/value pair
    return this.storage.get(endUrl);

}


 Set(endUrl: string , data: any) {

    // Or to get a key/value pair
    this.storage.set(endUrl,data).then((val) => {

    });
    }

现在在线模式工作正常,但是当应用程序离线时,我正在接受 虽然我正在返回可观察的内容,但无法读取未定义的属性subscribe

1 个答案:

答案 0 :(得分:1)

使用Observable.fromPromise

return Observable.fromPromise(this._OfflineService.Get(this.baseUrl + endUrl)) .map(val => val.json()) .catch((err) => { return Observable.throw("ERROR"); }); 功能中,其他部分:

map

这会将promise转换为observable,你可以使用function topFunction() { document.body.scrollTop=0 ; document.documentElement.scrollTop =0 ; } 来解析json并最终订阅。