【发布时间】:2015-08-27 10:02:39
【问题描述】:
我想确保 Observable.subscribe() 在不同的 Observable 产生 true 时不会被执行。
一个示例用例是确保用户只有在前一个下载完成(或失败)并且一次只执行一个下载请求时才能触发下载。
为了控制执行流程,我不得不依赖一个状态变量,这对我来说有点奇怪——这是一个好的模式吗?在一个可能的情况下,它不是 - 什么是更好的方法?
我最终得到了两个订阅:Actions.sync(使用主题、公共 API,初始化同步请求)和 isActive(解析为 true 或 `false,名称应该是不言自明的。
let canDownload = true; // this one feels really, really naughty
const startedSyncRequests = new Rx.Subject();
const isActiveSync = startedSyncRequests.map(true)
.merge(completeSyncRequests.map(false))
.merge(failedSyncRequests.map(false))
.startWith(false)
.subscribe(isActive => canDownload = !isActive)
syncResources = ()=>{
startedSyncRequests.onNext();
// Mocked async job
setTimeout(()=> {
completeSyncRequests.onNext();
}, 1000);
};
Actions.sync
.filter( ()=> canDownload ) // so does this
.subscribe( syncResources );
【问题讨论】:
-
是否要对中间下载请求进行排队?
标签: javascript frp rxjs