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