DEXIE - 一个函数的decl类型既不是'空'也不是'任何'必须返回一个值
问题描述:
我试图实现一个函数,检查价格是否在一个范围内。DEXIE - 一个函数的decl类型既不是'空'也不是'任何'必须返回一个值
数据位于IndexedDB中,我使用Dexie来处理它。
在这个时刻,我不能编译我的soluzion
public checkPrizeChange(codCli: string, codList: string, codArt: string, price: number): Observable<any> {
this._WebDBService.Listino_Articoli.filter(function (i){
return (i.codLis == codList && i.codArt == codArt);
}).toArray().then(
data => {
if(data.length != 1)
{
return Observable.of(false)
}
else{
if(data[0].prezzoMin >= price && data[0].prezzoMax <= price)
return Observable.of(true)
else
return Observable.of(false)
}
}
);
}
我不知道什么是正确的方式与dexie工作...
我只是要检查一些字段的DexieTable,没有什么难行,并返回一个可观察......
谢谢支持
答
此行之前添加return
:
return this._WebDBService.Listino_Articoli.filter(function (i){
答
Dexie方法toArray()返回一个Promise。你想返回一个Observable。
也许,你应该这样做:
public checkPrizeChange(codCli: string, codList: string, codArt: string, price: number): Observable<boolean> {
return Observable.fromPromise(this._WebDBService.Listino_Articoli.filter(i => i.codLis == codList && i.codArt == codArt).toArray().then(
data => {
if(data.length != 1)
{
return false;
}
else{
if(data[0].prezzoMin >= price && data[0].prezzoMax <= price)
return true;
else
return false;
}
}
);
}
而且,好像你可以利用compound index “[codLis + codArt]” 以加快您的查询。如果使用Dexie 2.0,您的查询可以改写利用索引:
this._WebDBService.Listino_Articoli.where({
codLis: codLis,
codArt: codArt
}).toArray()
现在我得到:类型“无极>”是不能分配给输入“可观察”。 但你是否确定这是正确的方法? –
DarioN1
将您的方法返回类型更改为'Observable' –
Faisal