要求是从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()方法
对此有任何解决方案吗?
答案 0 :(得分:2)
IndexedDB为asynchronous,因此预计返回值将是结果的承诺而不是结果本身。
对于TypeScript和ES2017,处理承诺的自然方式是async..await
。如果该方法应该与observables一起使用,那么promises应该转换为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 }
))
}
答案 1 :(得分: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;
})
);
}
&#13;