Rxjs中的flatMapLatest该怎么使用?
在阅读Rxjs文档的时候看到了flatMapLatest这个operator,对于它的使用有点迷茫,先看下文档中给出的图吧:
然后文中给出了一段代码:
var source = Rx.Observable
.range(1, 2)
.flatMapLatest(function (x) {
return Rx.Observable.range(x, 2);
});
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); });
文中给出的运行结果为:
Next: 1
Next: 2
Next: 3
Completed
对于上面的例子,我的问题是:
上面的flatMapLatest中的那个匿名函数,每执行一次返回的是一个observable,这个observerble的值发布两次,为什么上面的结果是1,2,3而不是1,2,2,3呢?如何确定第二个observable发布2之前第一个发布的2?(就是上图中的蓝色和绿色那种情况)
flatMapLatest这个方法在实际工作中是怎么使用的?能不能举个具体例子说明将原observable中的每个item转化为新的observable的例子?
另外我又读了一篇关于用Rxjs实现搜索框的一篇挺好的文章,关于如何用Rxjs实现搜索框的,文章中的代码如下:
var text = document.querySelector('#text');
Rx.Observable.fromEvent(text, 'keyup')
.debounce(250) // <- throttling behaviour
.pluck('target', 'value')
.flatMapLatest(url => Http.get(url)) // <- Kill the previous requests
.subscribe(data => render(data))
这段代码的中.flatMapLatest(url => Http.get(url))
这一句返回的还是一个observable吗?上面示例代码写的是return Rx.Observable.range(x, 2)
这样的形式,所以很疑惑,因为我以为flatMapLatest这个方法里面的匿名函数必须返回一个observable,是我理解错了吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因爲你用的是flatMapLatest (如果用flatMap就會1 2 2 3). 請把
The flatMapLatest operator behaves much like the standard FlatMap operator, except that
這段再讀一遍從上下文來看應該返回一個Observable