Dexie - ToArray() **类型 'Promise[]>' 不可分配给类型“[]”。**
Dexie - ToArray() **Type 'Promise[]>' is not assignable to type '[]'.**
要求 return 来自 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);
}
我得到的错误信息是:
类型 'Promise' 不可分配给类型 'Tipo[]'
我认为这是因为 ToArray() 函数 return 是一个承诺。
实际上我需要的是,用两个数组组成 res 对象,但我不知道如何结合这两个 promise toArray() 方法
有什么解决办法吗?
试试这个:
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;
})
);
}
IndexedDB 是 asynchronous,因此预计返回值将是结果的承诺,而不是结果本身。
对于 TypeScript 和 ES2017,处理 promises 的自然方式是 async..await
。如果该方法应该与 observables 一起使用,则应将 promises 转换为 observables。由于 RxJS 提供了比 ES6 承诺的更广泛的控制流功能,因此尽早完成它是有意义的,例如forkJoin
与 Promise.all
的工作方式类似,接受 promises 和完整的 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 }
))
}
要求 return 来自 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);
}
我得到的错误信息是:
类型 'Promise' 不可分配给类型 'Tipo[]'
我认为这是因为 ToArray() 函数 return 是一个承诺。
实际上我需要的是,用两个数组组成 res 对象,但我不知道如何结合这两个 promise toArray() 方法
有什么解决办法吗?
试试这个:
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;
})
);
}
IndexedDB 是 asynchronous,因此预计返回值将是结果的承诺,而不是结果本身。
对于 TypeScript 和 ES2017,处理 promises 的自然方式是 async..await
。如果该方法应该与 observables 一起使用,则应将 promises 转换为 observables。由于 RxJS 提供了比 ES6 承诺的更广泛的控制流功能,因此尽早完成它是有意义的,例如forkJoin
与 Promise.all
的工作方式类似,接受 promises 和完整的 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 }
))
}