Huy*_*yen 4 redux ngrx ngrx-effects angular ngrx-store
我的应用程序有3个下载按钮每个按钮单击将调度DownloadFileAction(payload = fileId) 一个Effect将继续监听Download_File_Action类型
@effect()
download_attachment$: Observable = this.actions$
.ofType(FileActions.ActionTypes.DOWNLOAD_ATTACHMENT)
.map(toPayload)
.switchMap( attachment => {
return this.service.downloadAttachment(attachment.link) //absolute link
.map( (data) => {
this.service.saveAttachment(data); //save file locally
return new FileActions.DownloadAttachmentSuccessAction(attachment);
})
.catch(error => {
//debugger;
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
})
如果同时单击多个按钮,将分派2个DownloadFileAction操作
Howerver,download_attachment $ effect只监听一个先下载然后返回DownloadAttachmentSuccessAction,因此其他下载文件将无法完成
有没有解决方案或解决方法?非常感谢您的想法
正如@cartant在评论中提到的,替换switchMap为mergeMap.
不同之处在于,每当父observable触发时switchMap都会切换上下文,并且mergeMap将继续监听父可观察对象并合并或组合结果.
本质上,switchMap当父observable发出新值时,从父observable的第一个流取消订阅.
在大理石图中,您可以看到何时3发射然后5发射,最终输出不包括3 30秒,因为在5发射时,它切换了上下文并且值被删除.
MergeMap将合并从父observable发出的所有值.
在大理石图中,mergeMap您可以看到从父observable发出的每个值都会发出所有值.也就是说,30即使最后一个值5是从父节点发出之后,所有s都会被释放.
希望这有助于更好地说明它.
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |