我正在Angular应用程序中实现缓存HTTP结果。据我所知,以下代码都有效,但我需要知道他们是否正在做完全相同的事情,或者我错过了一些重要的事情?
publishLast
getPosts() {
if( !this.posts$ ) {
this.posts$ = this.http.get('api').publishLast().refCount();
return this.posts$;
}
return this.posts$;
}
publishReplay
getPosts() {
if( !this.posts$ ) {
this.posts$ = this.http.get('api').publishReplay(1).refCount();
return this.posts$;
}
return this.posts$;
}
答案 0 :(得分:14)
publishLast
份额(顾名思义)最后排放值 - 只能在流完成时确定。
publishReplay(1)
分享最新排放值,这是在任何排放后完成的。
如果this.http.get(...)
行为相同,因为流会在收到结果后完成,因此最后和最新值是一回事。
对于发出多个值但在发出此值后不立即完成的流,您会得到不同的结果。