【发布时间】:2017-05-14 20:04:02
【问题描述】:
我试图了解当两个(或更多)switchMaps 被链接时会发生什么。
我正在使用这个示例代码:
.switchMap(r => someCondition(r) ? Observable.throw(r._body) : Observable.of(r.json()))
.switchMap(r => r.error ? Observable.throw(new Error(r.error)) : Observable.of(r))
.catch(this.handleError.bind(this));
这里会发生什么?如果someCondition(r) 为真,throw 将会发生,我相信catch 会从那里被执行。如果someCondition(r) 为假,那么第二个switchMap 将进入,但它会接收什么作为参数? r 的 json() 输出?还是只是r?
或者我完全错了,在这种情况下,我可以解释那里到底发生了什么吗?
【问题讨论】:
-
实际运行时发生了什么?
-
@OliverCharlesworth 我实际上无法运行代码,因为我无法重现
r的所有可能条件,所以我试图了解它的行为方式。 -
当然可以,但绝对可以模拟一个更简单的情况(例如,
someCondition只是替换为true或false)。 -
@OliverCharlesworth 是的,我可以用 true/false 替换
someConditon,但这是我能做的最多的事情,而无需进一步了解switchMap实际如何处理链接。 -
switchMap(r => some_made_up_logic).subscribe(x => console.log(x))将允许您观察(双关语)switchMap在各种情况下的行为。
标签: javascript angular rxjs