2017-10-06 22 views
0

我试图实现一个函数,检查价格是否在一个范围内。DEXIE - 一个函数的decl类型既不是'空'也不是'任何'必须返回一个值

数据位于IndexedDB中,我使用Dexie来处理它。

在这个时刻,我不能编译我的soluzion

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,没有什么难行,并返回一个可观察......

谢谢支持

回答

1

此行之前添加return

return this._WebDBService.Listino_Articoli.filter(function (i){ 
+0

现在我得到:类型“无极>”是不能分配给输入“可观察”。 但你是否确定这是正确的方法? – DarioN1

+0

将您的方法返回类型更改为'Observable ' – Faisal

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() 
+0

谢谢David!非常感谢 !!! – DarioN1

+0

Listino_Articoli:'[codLis + codArt],prezzo,preSco,preScoTes,codSco,prePro,valSco,perSco1,perSco2,perSco3,datIniSco,datFinSco,prezzoMin,prezzoMax', – DarioN1

+0

这是带有组合键的表格! – DarioN1

相关问题