ionic2可观察数据服务

时间:2017-03-15 08:51:30

标签: ionic2 observable subscribe dataservice

我是Ionic 2的新手,它是可观察的。我有以下问题。我有一个dataservice,它有一个函数findAll。此函数检查private var products != false是否需要返回该值。如果没有,它需要检查nativestorage并返回该值,如果它被填充,如果没有,它检查http get并返回

我的问题,我不想订阅findAll函数,如果http get这是可能的,因为它返回一个observable(如果我是对的),nativestorage getitem返回一个promise不是一个可观察的。并且已填充的私有变量的第一个场景也不是可观察的。

希望我能够清楚地描述这个问题

@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);
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现所需的功能:

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)
                }
            });

    }

}