我正在尝试限制DownloadProgressEpisodes
动作的派发数量,而我正在做的事情没有用,我很明白为什么。
但是,我还没有找到正确执行此操作的方法。
this.episodesService.download
将返回可观察到的HttPEvent流(类型0到3 =正在下载,类型4 =成功)。
如果我不作限制,那么大文件将分派数百个DownloadProgressEpisodes
动作,最后,当事件类型= 4时,将分派DownloadEpisodesSuccess
和响应(blob)。>
当我在地图前进行节流以查看事件类型时,最后一次发射将被丢弃,这是不可接受的更改。可以限制所有类型为3的事件,但是应该始终处理事件类型4(最后一个)。
这是我想要的概念,但是它不起作用,因为of(response)
不是原始流,只是一个发射值)。加快油门速度将导致上述情况。
@Effect( { dispatch: true})
downloadEpisode$ = this.actions$
.pipe(
ofType<any>( episodeActions.DOWNLOAD_EPISODE ),
switchMap( ( { payload } ) => this.episodesService.download( payload )
.pipe(
switchMap( (response: HttpEvent<any> | HttpResponse<any>) => this.episodesService.getHttpProgress( response ) ),
switchMap( ( response: fromServices.DownloadProgress ) => {
if ( response.type <= 3 ) {
return of(response)
.pipe(
throttleTime( 2000 ),
tap( val => console.log( 'type 3-->', val ) ),
map( ( response: fromServices.DownloadProgress ) => {
return new episodeActions.DownloadProgressEpisodes( { ...payload, download: {
progress: response.progress
} } );
} ),
);
} else {
return of(response)
.pipe(
tap( val => console.log( 'type 4-->', val )),
map( ( response: fromServices.DownloadProgress ) => {
return new episodeActions.DownloadEpisodesSuccess( response, { ...payload, download: {
progress: response.progress
} } );
} ),
);
}
} ),
catchError( error => of( new episodeActions.DownloadEpisodesFail( error ) ) ),
)
)
)
添加2种额外效果,一种用于类型3(并限制该效果)和一种用于类型4均无效,因为原始效果仍然会触发与事件发出次数相同的次数。
是否有一个允许我进行调节但始终包含最后发出的值的运算符?分区,可能会出现类型错误,因为效果不喜欢返回2个流?
我想要的显示在图片中。我想调用较少的Progress操作,并始终捕获最后的响应,该响应是类型4,并且具有Blob。