Rxjs中的flatMapLatest该怎么使用?

发布于 2022-09-04 13:34:57 字数 1713 浏览 8 评论 0

在阅读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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独孤求败 2022-09-11 13:34:57

为什么上面的结果是1,2,3而不是1,2,2,3呢

因爲你用的是flatMapLatest (如果用flatMap就會1 2 2 3). 請把The flatMapLatest operator behaves much like the standard FlatMap operator, except that 這段再讀一遍

图片描述

这段代码的中.flatMapLatest(url => Http.get(url))这一句返回的还是一个observable吗?

從上下文來看應該返回一個Observable

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文