DEXIE - 一个decl类型的函数既不是' void'也没有任何'必须返回一个值

时间:2017-10-06 09:26:32

标签: angular typescript dexie

我试图实现一个检查价格是否在范围内的函数。

数据位于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 ......

感谢支持

2 个答案:

答案 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()