我是Ionic 2的新手,它是可观察的。我有以下问题。我有一个数据服务,它有一个函数 findAll。此函数检查private var products != 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)
}
});
}
}