我有以下代码
getEnquiryWithId(id: number) {
let enquiryStore = this.db.transaction('enquiries', 'readonly').objectStore('enquiries');
let index = enquiryStore.index('enquiries');
let request = index.get(id);
return request.onsuccess = (event) => {
return event.target.result;
}
}
我试图在管道中使用
transform(value: number): string {
let request = this.dbStore.getEnquiryWithId(value);
let result = request();
}
我收到错误Cannot invoke an expression whose type lacks a call signature
。
注意:我不能在这里依赖RxJs主题,因为我的转换函数需要返回一些东西,因为它是一个管道。我如何使这项工作?
答案 0 :(得分:0)
标题误导。您不希望从箭头函数返回数据(这很简单),但是您希望同步执行箭头函数 - 这是不可能的,因为它是一个将被调用的回调函数。 JS引擎。
正如其他人所说,你可以在你的函数中返回一个Promise,它在内部查询成功后立即解析:
getEnquiryWithId(id: number) {
let enquiryStore = this.db.transaction('enquiries', 'readonly').objectStore('enquiries');
let index = enquiryStore.index('enquiries');
let request = index.get(id);
return new Promise((resolve, reject) => {
request.onsuccess = (event) => {
resolve(event.target.result);
};
request.onerror = (event) => {
reject(request.errorCode);
};
}
}
如果要显示承诺的结果,只需使用AsyncPipe
即可。没有必要编写自己的转换函数。