【问题标题】:DEXIE - A function whose decl ared type is neither 'void' nor 'any' must return a valueDEXIE - 声明类型既不是“void”也不是“any”的函数必须返回一个值
【发布时间】:2018-03-18 01:44:29
【问题描述】:

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

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

感谢支持

【问题讨论】:

    标签: angular typescript dexie


    【解决方案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()
    

    【讨论】:

    • Listino_Articoli: '[codLis+codArt], prezzo, preSco, preScoTes, codSco, prePro, valSco, perSco1, perSco2, perSco3, datIniSco, datFinSco, prezzoMin, prezzoMax',
    • 那是带有组合键的表!
    【解决方案2】:

    在此行前添加return

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

    【讨论】:

    • 现在我得到:类型 'Promise>' 不可分配给类型 'Observable'。但是你确定这是正确的方法吗?
    • 将方法返回类型更改为Observable&lt;boolean&gt;
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2021-12-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多