2017-10-09 62 views
0

要求是從localdb返回兩個簡單數組。Dexie - ToArray()**鍵入'Promise []>'不能分配給'[]'類型。**

功能是:

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

該錯誤消息我得到的是:

類型 '無極' 不是分配給輸入 'TIPO []'

我認爲這是因爲ToArray()函數返回一個promise。

其實我需要的是,以組成RES對象與兩個數組,但我不知道如何在兩個承諾指定者()方法

任何解決這個結合?

+1

代碼不夠清楚。它應該返回可觀察的,但返回null。那麼'res'應該發生什麼?請參閱http://stackoverflow.com/help/mcve – estus

+0

對不起,應該返回res,我編輯代碼 – DarioN1

回答

1

試試這個:

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不編譯...該方法應該返回一個Observable ... – DarioN1

+0

只需將承諾轉換爲observable(請參閱更新回答) – Faly

2

IndexedDB的是asynchronous,所以預計返回值將是結果的承諾,而不是結果本身。

對於TypeScript和ES2017,處理承諾的自然方式是async..await。如果該方法應該與observables一起工作,promise應該轉化爲observables。由於RxJS提供比ES6承諾更廣泛的控制流功能,所以儘早做到這一點是很有意義的,例如,與forkJoin工作方式類似於Promise.all,並接受承諾和完整的可觀察到的來源:

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

也是一個很好的答案! – Faly

相關問題