繁体   English   中英

DEXIE-一个其decl ared类型既不是'void'也不是'any'的函数必须返回一个值

[英]DEXIE - A function whose decl ared type is neither 'void' nor 'any' must return a value

我正在尝试实现一个检查价格是否在范围内的功能。

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

感谢支持

在此行之前添加return

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

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;
      }
    }
  );
}

另外,似乎您可以利用复合索引 “ [codLis + codArt]”来加快查询速度。 如果使用Dexie 2.0,则可以重写查询以利用索引:

this._WebDBService.Listino_Articoli.where({
  codLis: codLis,
  codArt: codArt
}).toArray()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM