2017-10-09 2 views
0

L'exigence consiste à renvoyer deux tableaux simples de localdb.Dexie - ToArray() ** Type 'Promise []>' n'est pas assignable au type '[]'. **

La fonction est:

public getCaricamentoVeloceConf(): Observable<any> { 
    let res = new RespOrdiniGetsceltecaricamentoveloce(); 

    res.tipo = this._WebDBService.Configurazione_CV_Scelte.toArray(); 
    res.ordinamento = this._WebDBService.Configurazione_CV_Ordinamento.toArray(); 

    return Observable.of(res); 
    } 

Le message d'erreur je reçois est:

Type 'Promise' est incessible taper 'Tipo []'

Je pense que c'est parce que la fonction ToArray() renvoie une promesse.

En fait, ce que j'ai besoin est, pour composer les res objet avec les deux tableaux, mais je ne sais pas comment combiner les méthodes

deux promesse toArray()

Toute solution à cela?

+1

Le code ne suffit pas claire. Il est censé retourner observable mais retourne null. Que devrait-il se passer avec 'res' alors? Voir http://stackoverflow.com/help/mcve – estus

+0

Désolé, devrait retourner res, je modifie le code – DarioN1

Répondre

1

Essayez ceci:

import 'rxjs/add/observable/fromPromise'; 
 
import { Observable } from "rxjs/Observable"; 
 

 
public getCaricamentoVeloceConf(): Observable<any> { 
 
    var res = new RespOrdiniGetsceltecaricamentoveloce(); 
 
    return Observable.fromPromise(
 
     this._WebDBService.Configurazione_CV_Scelte.toArray().then(tipo => {  
 
      res.tipo = tipo; 
 
      return this._WebDBService.Configurazione_CV_Ordinamento.toArray(); 
 
     }).then(ordinamento => { 
 
      res.ordinamento = ordinamento; 
 
      return res; 
 
     }) 
 
    ); 
 
    }

+0

Id ne compile pas ... La méthode devrait renvoyer un Observable ... – DarioN1

+0

Juste convertir la promesse à observable (voir mise à jour réponse) – Faly

2

IndexedDB est asynchronous, il est donc prévu que la valeur retournée sera une promesse du résultat et non le résultat lui-même. Pour les polices TypeScript et ES2017, le moyen naturel de gérer les promesses est async..await. Si la méthode est supposée fonctionner avec des observables, les promesses devraient être transformées en observables. Etant donné que RxJS offre des caractéristiques de flux de contrôle plus étendues que les promesses ES6, il est logique de le faire le plus tôt possible, par ex. avec forkJoin qui fonctionne de façon similaire à Promise.all et accepte les promesses et complètes en tant que sources observables:

public getCaricamentoVeloceConf(): Observable<any> { 
    return Observable.forkJoin(
     this._WebDBService.Configurazione_CV_Scelte.toArray(), 
     this._WebDBService.Configurazione_CV_Ordinamento.toArray() 
    ) 
    .map(([tipo, ordinamento]) => Object.assign(
     new RespOrdiniGetsceltecaricamentoveloce(), 
     { tipo, ordinamento } 
    )) 
    } 
+0

Aussi une bonne réponse! – Faly