RxJS switchMap 不会取消内部合并的可观察值

2023-12-24

内部合并的可观察量不会以此代码终止(rxjs 5.5.6):

    let source = new Subject<string[]>();

    // when the source emits a vector of strings, output 
    // each string with a 1s delay
    source.switchMap(v => Observable.from(v)
        .map(s => Observable.of(s).delay(1000).do(s => console.log('do: ' + s)))
        // only one active observable at time  
        .mergeAll(1) 
    ).subscribe(val => console.log('result: ' + val));

    // emit two vectors, 1.5s apart
    Observable.interval(1500).take(2).map(i => ['a' + i, 'b' + i, 'c' + i])
        .subscribe(v => source.next(v));

输出是:

do: a0
result: a0
do: b0
do: a1
result: a1
do: c0
do: b1
result: b1
do: c1
result: c1

预期输出是:

do: a0
result: a0
do: a1
result: a1
do: b1
result: b1
do: c1
result: c1

也就是说,在第二个向量发出后, switchMap 应该取消订阅第一个向量上的可观察值,从而取消该可观察值。虽然取消订阅显然有效,但内部可观察仍在运行,如第一个示例的输出中的“do: a0 .. b0 .. c0”所示。

事实上,预期的输出正是您从这段代码中得到的:

    let source = 
        Observable.interval(1500).take(2).map(i => ['a' + i, 'b' + i, 'c' + i]);

    source.switchMap(v => Observable.from(v)
        .map(s => Observable.of(s).delay(1000).do(s => console.log('do: ' + s)))
        .mergeAll(1)
    ).subscribe(val => console.log('result: ' + val));

但为什么第一个例子的行为不一样呢?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJS switchMap 不会取消内部合并的可观察值 的相关文章

  • Angular2 RxJS从地图函数调用类函数

    我是 Angular 2 和 Observables 的新手 所以如果我的问题微不足道 我深表歉意 无论如何 我正在尝试使用 RxJS 测试 Angular 2 HTTP 客户端 虽然我让它工作了 但我需要向我当前正在处理的服务添加更多逻辑
  • rxjs 7 更新 - 主题 - 预期 1 个参数,但得到 0 个

    我将 rxjs 从版本 6 x x 更新到 7 x x 但出现以下错误 src app app component ts 中出现错误 12 19 预期有 1 个参数 但得到 0 个 当试图next一个空值Subject destroy ne
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • RxJS - 我需要取消订阅吗

    如果我有这样的事情 class MyComponent constructor this interval Observbale interval 1000 const c new MyComponent const subscriptio
  • 可从 Angular2 中的

    使用 Angular 2 从按钮的 onclick 事件创建可观察对象的首选方法是什么 我不确定从组件代码中的 DOM 获取本机元素是否被认为是最佳实践 我该怎么做 或者是否还有其他我不知道的快捷方式 别想太多 ViewChild butt
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • Angular 7测试重试当模拟http请求无法实际重试时

    我有以下尝试使用 OAuth 的拦截器refresh token每当获得任何 401 错误 响应时 基本上 刷新令牌是在第一个 401 请求上获取的 获取后 代码会等待 2 5 秒 在大多数情况下 第二个请求不会触发错误 但如果触发错误 令
  • 如何在 Angular 中实现全局加载器

    我有一个全局加载器 其实现如下 核心模块 router events pipe filter x gt x instanceof NavigationStart subscribe gt loaderService show router
  • 使用许多嵌套的 switchMap 是不好的做法吗?

    我有 HTTP 拦截器 在该拦截器中 在更改请求之前 我需要打开一个加载程序 真正让我担心的是我最终会得到很多switchMaps why 加载器是异步的 我还需要将从拦截器传递的消息转换为加载器服务 翻译消息也是异步的 在拦截器中 我应该
  • Angular 2 中的 Observable 和 ngFor

    下面是一个使用 rxjs Observables 的简单示例 Angular 2 组件 import Component OnInit from angular core import Observable from rxjs Observ
  • 如何按顺序使用 RxJS 可观察量?

    事情是这样的 我有一个 HTTP get 请求 它返回一个 JSON 对象列表 我使用 RxJS 订阅接收该列表的数据 现在 对于该列表中的每个对象 我想执行另一个 HTTP 请求 然后将该请求的结果放入数组中 到目前为止 我已经能够做到这
  • 使用 RxJS 可暂停缓冲区

    我正在尝试使用 RxJS 流实现可切换的自动保存功能 目标是 启用自动保存后 将更改发送到服务器 当自动保存被禁用时 缓冲更改并在自动保存重新启用时将它们发送到服务器 这是我遇到的情况 autoSave new BehaviorSubjec
  • 可观察的重试 / retryWhen 与平面地图

    我有以下代码来获取 id 以及与 id 相关的数据 process Observable
  • 是否可以使用 rxjs Angular 5 在其他选项卡浏览器中订阅 observable

    我有一个角度应用程序 有两个页面 我在浏览器的每个选项卡中打开它们 如果我在第 1 页中执行某种方法 我希望第 2 页使用 rxjs 订阅数据更改并像实时应用程序一样更新第 2 页中的数据 是有没有办法在没有 websocket 的情况下做
  • 延迟加载:Observable 未订阅

    在我的 Angular 应用程序中 我有一个父组件 控制台 组件 html div class main div
  • rxjs 主题应该在课堂上公开吗?

    假设我有两个类 您可以在其中观察一些可观察量 第一个例子 公共主题 class EventsPub public readonly onEnd new Subject
  • RxJ 从 observable 中获取价值

    在组件中 singleEvent Observable
  • 角度-触发新警报时以编程方式关闭警报

    我有两种警报 辅助警报和延迟警报 首先显示辅助警报消息 用户必须单击 确定 按钮才能将其关闭 但也有延迟警报 这是由setTimeout 当向用户显示此延迟警报时 我尝试自动关闭辅助警报 我试图像这样消除次要警报 this secondar
  • Angular 4 Subscribe方法多次调用

    我正在创建一个全局模态组件 我的问题是 当我调用 subscribe 方法时 它会根据调用的模态数量多次调用 如何防止对可观察订阅方法的多次调用 请检查下面我的代码 提前致谢 模态 model ts export class Modal t
  • Angular/RxJS 我什么时候应该取消订阅“订阅”

    我什么时候应该储存Subscription实例并调用unsubscribe 在此期间ngOnDestroy生命周期以及什么时候我可以忽略它们 保存所有订阅会给组件代码带来很多混乱 HTTP 客户端指南 https angular io do

随机推荐