ionic2可观测数据服务

ionic2可观测数据服务,ionic2,observable,subscribe,dataservice,Ionic2,Observable,Subscribe,Dataservice,我是离子2的新手,它是可观测的。我有以下问题。我有一个数据服务,它有一个findAll函数。此函数用于检查专用var产品!=false如果是,则需要返回该值。如果没有,则需要检查nativestorage并返回该值(如果已填充),如果没有,则检查http get并返回该值 我的问题是,我不想订阅findAll函数,在http get的情况下,这是可能的,因为它返回一个可观察的(如果我是对的),nativestorage getitem返回一个承诺而不是可观察的。已经填充的私有变量的第一个场景也是

我是离子2的新手,它是可观测的。我有以下问题。我有一个数据服务,它有一个findAll函数。此函数用于检查
专用var产品!=false
如果是,则需要返回该值。如果没有,则需要检查
nativestorage
并返回该值(如果已填充),如果没有,则检查http get并返回该值

我的问题是,我不想订阅
findAll
函数,在http get的情况下,这是可能的,因为它返回一个可观察的(如果我是对的),nativestorage getitem返回一个承诺而不是可观察的。已经填充的私有变量的第一个场景也是不可观察的

希望我把这个问题描述得足够清楚

@Injectable()
export class dataService {
    products = false;

    constructor (http:Http) {
        this.http = http;
    } 

    findAll() {
        if (this.products !== false) {
            //HOWTO return this.products AS OBSERVABLE?
        } else {

            //HOWTO check native storage and return observable??
            NativeStorage.getItem('products') 

            //ELSE RETURN observable http get and 
            //HOWTO ADD TO this.products and NativeStorage.setItem
            return this.http.get(productsURL)
                .map(res => res.json())
                .catch(this.handleError);
        }

    }
}

您想要的功能可以通过以下方式实现:

findAll():Observable<any[]> {
    if (this.products !== false) {
        return new Observable((observer) => {
            observer.next(this.products);
            observer.complete();
        });
    } else {
        let localProducts = NativeStorage.getItem('products');

        return Observable.fromPromise(localProducts)
            .map(products => {
                if (products) {
                    return new Observable((observer) => {
                        observer.next(products);
                        observer.complete();
                    });
                } else {
                    return this.http.get(productsURL)
                            .map(response => response.json())
                            .catch(this.handleError)
                }
            });

    }

}
findAll():可观察{
if(this.products!==false){
返回新的可观察对象((观察者)=>{
observer.next(本产品);
observer.complete();
});
}否则{
让localProducts=NativeStorage.getItem('products');
可观察的返回。来自承诺(localProducts)
.map(产品=>{
if(产品){
返回新的可观察对象((观察者)=>{
观察员:下一步(产品);
observer.complete();
});
}否则{
返回此.http.get(productsURL)
.map(response=>response.json())
.接住(这个.把手错误)
}
});
}
}

这看起来可以工作,但代码在我看来有点冗长。尼克,我今晚会试试这个解决方案@KemalYalcinkaya有更好的方法吗?