如何解决如何处理Dexie交易中的请求?
我已经编写了一种方法,可以通过Dexie在一次事务中从IDB读取和写入数据:
transactionalRW<T>(table: string,key: any,handler: (instance: T) => T | Observable<T>): Promise<T> {
// start transaction with read/write rights
return this.transaction('rw',this.table(table),() =>
this.table(table).get(key).then((instance: T) => {
// let callback handle the fetched object
const newInstance: T | Observable<T> = handler(instance);
// treat new instance differently depending on whether or not it is an observable
if (isObservable(newInstance)) {
return Dexie.waitFor(newInstance.pipe(switchMap(_newInstance => this.table(table).put(_newInstance))));
} else {
return this.table(table).put(newInstance).then(() => newInstance);
}
}
)
);
}
如果handler
未返回Observable,则此代码可以正常工作。但是,如果在handler
中使用了一个后端请求,那么我必须将全部内容包装到Dexie.waitFor(...)
中,最后我将返回一个包含Observable的Promise-真难看。我希望能够只将newInstance
返回的Observable放入IDB之后,返回一个包含handler
的Promise(或Observable)。
有人知道怎么做吗?我无法处理交易外的请求,因为该请求取决于从IDB检索到的数据。
如果我只是这样做:
Dexie.waitFor(...);
return newInstance.toPromise();
抛出Dexie.PrematureCommitError
。
非常感谢您。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。