2017-10-06 1 views
0

Je suis en train de mettre en œuvre une fonction qui vérifie si un prix est dans une plage.DEXIE - Une fonction dont le type décl ARED est ni « vide » ni « aucune » doit retourner une valeur

Les données se trouvent dans l'IndexedDB et j'utilise Dexie pour travailler avec.

En ce moment, je ne peux pas compiler mon 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) 
     } 
     } 
    ); 
    } 

Je ne sais pas quelle est la façon de bien travailler avec dexie ...

Je viens de vérifier certains champs une rangée d'une DexieTable, rien dur et retourner un observable ...

Merci pour soutenir

Répondre

1

Ajouter return avant cette ligne:

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

maintenant je: Type Promise > 'est incessible à taper 'Observable '. Mais êtes-vous sûr que c'est la bonne méthode? – DarioN1

+0

Modifier le type de votre retour de méthode pour '' Observable Faisal

1

La méthode Dexie toArray() renvoie une promesse. Vous voulez retourner un observable.

Probablement, vous devriez faire quelque chose comme:

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

En outre, vous pouvez utiliser un semble compound index "[codLis + Codart]" pour accélérer votre requête. Si vous utilisez Dexie 2.0, votre requête pourrait être réécrite pour utiliser l'index:

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

Merci David !!! Vraiment apprécié !!! – DarioN1

+0

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

+0

C'est la table avec la clé composée! – DarioN1