我试图了解flatMap的工作原理.我知道这是一种处理Observable <Observable <T >>的方法.
无论如何,我正在测试它的行为并且坚持这个:
let plusDom = document.querySelector('#plus');
let minusDom = document.querySelector('#minus');
let minusSource = Rx
.Observable
.fromEvent(minusDom, 'click');
let plusSource = Rx.Observable
.fromEvent(plusDom, 'click');
plusSource
.flatMap(function(c){
console.log('Flatmap called');
return minusSource;
})
.subscribe(function(e){
console.log('done');
})
Run Code Online (Sandbox Code Playgroud)
这里是jsbin:https://jsbin.com/sefoyowuqe/edit ? html,js,console,output
我不明白这种行为:
3 clicks on plusDom prints:
Flatmap called
Flatmap called
Flatmap called
Run Code Online (Sandbox Code Playgroud)
1单击minusDom打印:
done
done
done
Run Code Online (Sandbox Code Playgroud)
为什么在点击minusDom时,它会像点击plusDom那样多次重放事件?
flatMap
基本上将返回的流平放在原始流中。您可能正在寻找的是switchMap
,它将切换到返回的流,并在原始源通过丢弃旧流来发出数据时切换到新流。
如有疑问,switchMap通常是最安全的替代方案。
请参阅大理石图进行比较:
Flatmap 不会删除之前“扁平化”的流并且:
Switchmap删除之前“切换”的流。
归档时间: |
|
查看次数: |
838 次 |
最近记录: |