Dexie - ToArray()**类型'承诺[]>'不能指定类型' []'。**

时间:2017-10-09 10:06:11

标签: angular typescript es6-promise dexie

要求是从localdb返回两个简单数组。

功能是:

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

我收到的错误消息是:

类型&#39;承诺&#39;不能分配给类型&#39; Tipo []&#39;

我认为这是因为ToArray()函数返回一个promise。

实际上我需要的是,用两个数组组成res对象,但我不知道如何将两个promise结合到array()方法

对此有任何解决方案吗?

2 个答案:

答案 0 :(得分:2)

IndexedDB为asynchronous,因此预计返回值将是结果的承诺而不是结果本身。

对于TypeScript和ES2017,处理承诺的自然方式是async..await。如果该方法应该与observables一起使用,那么promises应该转换为observables。由于RxJS提供比ES6承诺更广泛的控制流功能,因此尽可能早地完成它是有意义的,例如: forkJoinPromise.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 }
    ))
  }

答案 1 :(得分:1)

试试这个:

&#13;
&#13;
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;
        })
     );
  }
&#13;
&#13;
&#13;