【发布时间】:2017-06-14 17:04:26
【问题描述】:
下面是响应式代码的短代码sn-p (RxJs)
let subj = new Rx.Subject();
let chain = subj
.switchMap(v => Rx.Observable.of(10*v).do(vv => console.log("Switch map", vv)))
.share()
.take(1);
function subscribe(){
chain.subscribe(v => console.log("Next", v),
err => console.log("Error",err),
() => console.log("Completed"));
chain.subscribe(v => console.log("Next2", v),
err => console.log("Error2",err),
() => console.log("Completed2"));
subj.next(Math.random());
}
subscribe();
subscribe();
subscribe();
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
根据documentationchain 是一个Observable,它应该打印发出的值 * 10 (switchMap),同时只打印一次,不管它有多少订阅 (share ),仅对第一个发出的值执行此操作,然后完成。
前两个项目符号工作正常,但最后一个项目符号不行。 这是我得到的输出:
Switch map 9.022491050934722
Next 9.022491050934722
Completed
Next2 9.022491050934722
Completed2
Switch map 9.172999425126836
Next 9.172999425126836
Completed
Next2 9.172999425126836
Completed2
Switch map 6.168790337405257
Next 6.168790337405257
Completed
Next2 6.168790337405257
Completed2
如您所见,chain 正在多次完成。
是什么让您可以多次完成相同的Observable?
【问题讨论】:
标签: javascript rxjs observable rxjs5 reactivex