【发布时间】:2017-08-19 23:38:20
【问题描述】:
我正在寻找实现优化的最佳方法,该方法采用多个参数并返回 Observable 的非常昂贵的方法。有没有优雅的方法?
我正在寻找的是更漂亮的版本:
class Example {
constructor(
private databaseService: DatabaseService,
private someService: SomeService)
expensive(param1: string, param2: string) : Observable<string> {
if (isMemoraized(param1,param2) {
return Observable.create(observer=>
observer.next(memorizedValue(param1, param2));
observer.complete();
} else {
return Observable.create(observer=>{
Observable.forkJoin([
this.databaseService.getValue(param1, param2),
this.someService.fetchDataFromServer(param2)].subscribe(
results => {
let result = results[0] + ' ' + results[1];
memorizeValue([param1,param2], result);
observer.next(result);
observer.complete();
});
});
}
}
}
任何帮助表示赞赏!
【问题讨论】:
-
该服务应该可能实现缓存存储而不是基本的记忆。结果应该永不过期吗?应该存储多少个请求?如果错误响应被 momoized 会发生什么?
-
是的 - 我更喜欢缓存存储而不是基本的记忆,最好是一个包含过期时间、清除缓存的方法等所有内容的包......就数量而言,可能有数百个。跨度>
-
我会建议像github.com/jmdobry/CacheFactory 这样的东西。至于缓存键,可能是
JSON.stringify([param1, param2])。 -
谢谢 - 这简化了它 - 你知道任何支持 Observables 的缓存库吗?
-
您实际上并不需要支持它们。它只是一个存储,你从中挑选对象并使用 Observable.of 返回它们。
标签: angular typescript rxjs observable memoization