我试图实现一个检查价格是否在范围内的函数。
数据位于IndexedDB中,我使用Dexie来处理它。
在这一刻我无法编译我的解决方案
public checkPrizeChange(codCli: string, codList: string, codArt: string, price: number): Observable<any> {
this._WebDBService.Listino_Articoli.filter(function (i){
return (i.codLis == codList && i.codArt == codArt);
}).toArray().then(
data => {
if(data.length != 1)
{
return Observable.of(false)
}
else{
if(data[0].prezzoMin >= price && data[0].prezzoMax <= price)
return Observable.of(true)
else
return Observable.of(false)
}
}
);
}
我不知道与dexie合作的正确方法是什么......
我只需要检查DexieTable的一行中的某些字段,没什么难的并且返回一个Observable ......
感谢支持
答案 0 :(得分:1)
在此行之前添加return
:
return this._WebDBService.Listino_Articoli.filter(function (i){
答案 1 :(得分:1)
Dexie方法toArray()返回一个Promise。你想要返回一个Observable。
可能你应该做点什么:
public checkPrizeChange(codCli: string, codList: string, codArt: string, price: number): Observable<boolean> {
return Observable.fromPromise(this._WebDBService.Listino_Articoli.filter(i => i.codLis == codList && i.codArt == codArt).toArray().then(
data => {
if(data.length != 1)
{
return false;
}
else{
if(data[0].prezzoMin >= price && data[0].prezzoMax <= price)
return true;
else
return false;
}
}
);
}
此外,您似乎可以使用compound index“[codLis + codArt]”来加快查询速度。如果使用Dexie 2.0,则可以重写您的查询以使用索引:
this._WebDBService.Listino_Articoli.where({
codLis: codLis,
codArt: codArt
}).toArray()