Observable.prototype.concatAll 似乎没有产生预期的结果

2024-03-24

记住这段代码:

const Rx = require('rxjs');

var i = 3;

const obs = Rx.Observable.interval(10)
    .map(() => i++)
    .map(function(val){
        return Rx.Observable.create(obs => {
            obs.next(val)
        });
    })
    .take(10)
    .concatAll();


obs.subscribe(function(v){
    console.log(v);
});

我本以为记录的结果是这样的:

[3,4,5,6,7,8,9,10,11,12]

即 10 个值,从 3 开始。

然而我们得到的只是

3

有谁知道为什么会这样?


concatMap将等待第一个可观察的完成,然后再订阅下一个。您忘记添加.complete()到你的内部可观察到的,有效地让你的流只发出第一个值3并无限期地等待第一个流完成,然后再连接下一个流。

笔记;对于根据您的问题进行简单的价值发射,您也可以使用Rx.Observable.of()代替Rx.Observable.create()

var i = 3;

const obs = Rx.Observable.interval(10)
  .map(() => i++)
  .map(val => Rx.Observable.of(val))
  .take(10)
  .concatAll();

obs.subscribe(v => console.log(v));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Observable.prototype.concatAll 似乎没有产生预期的结果 的相关文章

  • 测试rxjs的正确方法

    我把书带来了 rxjs 在行动 并完成测试部分 测试 rxjs 代码与通常的测试不同 因为一切都是延迟加载 在书中 他们提到了两种测试方法 要么传递完成 我正在使用 QUnit 完成信号异步代码已完成 要么传递大理石图 我的问题是 我应该选
  • 类型错误:observable.of 不是函数 - [电子邮件受保护] - [电子邮件受保护] - angular5

    升级到后 电子邮件受保护 并将所有 RxJS 导入 方法和运算符转换为新的 gt 5 5 形式 我在运行时收到类型错误 Observable of不是一个函数 定义为扩展的成员的所有方法都会发生相同的错误Observable 例如 Obse
  • RxJS 中是否存在与“race”运算符相反的操作符?

    我有两个可观察量 我想听最后发出第一个值的那个 是否有一个运算符 像这样的东西 let obs1 Rx Observable timer 500 500 let obs2 Rx Observable timer 1000 1000 I wa
  • 对 rxjs 订阅进行反跳和缓冲

    我有一个消息队列处理器 可以将消息提供给服务 q on message m gt service create m then gt m ack catch gt n nack 该服务使用 RxJS Observable 并订阅debounc
  • Observable .catch 不是一个函数

    从 Unix 环境运行代码时 我遇到了这个非常烦人的错误 当我通过本地运行代码时 这工作正常ng serve 但是当我将代码部署到我的服务器时 此错误会停止所有程序执行 ERROR TypeError this http get catch
  • 如何在 RxJs 5 中将主题转换为可观察对象

    我们如何在 RxJs 5 中将主题转换为可观察对象 例如 当我们想要公开主题进行订阅但又不想放弃对调用的控制时 此功能非常有用next 并倾向于将新值的发布保密 文档 参见here https github com Reactive Ext
  • Angular 2 Http 重试时间

    我正在尝试使用retryWhen在 HTTP 调用中 当尝试像这样使用时它工作得很好 return this http get environment apiUrl track this user instance id this curr
  • rxjs 创建可观察超时总是错误

    好吧 现在我真的很困惑 执行以下代码 const created Rx Observable create observer gt observer next 42 const ofd Rx Observable of 42 const c
  • Angular 2 / RXJS - 需要一些帮助来处理请求

    我一直在阅读 rxjs 文档 但迷失在所有操作符中 这就是我到目前为止所得到的 let obs Observable from 1 3 5 所以我需要做的是take 数组中的一些设定数量 在发布请求中使用结果 当成功时 我需要重新启动该过程
  • 通过 *ngFor 在 Angular 2 模板中使用可观察量

    如果我使用 ngFor 构建访问链 我将无法访问异步管道提供的对象的属性 在下面的示例中 假设Parking在测试线和 filter propName 下面的两条线代表同一对象上的相同键 测试行的计算结果将为 true 但检查的属性不会 为
  • Angular 2 - RxJS 切换映射问题

    我试图在我的应用程序中拥有无限滚动部分 为了实现这一目标 我正在使用该组件 https www npmjs com package angular2 perfect scrollbar处理滚动事件等 当滚动到达 div 底部时 我将调用一个
  • 主题和可观察,如何删除项目,filter()列表和next()

    我有一个包含主题和可观察的歌曲设置列表 显示为 async在视图中 现在我想从列表中删除一首歌曲 请执行一些操作filter 并打电话next 就此主题而言 如何以及在哪里进行过滤 现在我正在做getValue 关于主题并将其传递给next
  • 根据特定条件连接 RxJ 中的两个可观察流

    我有两个对象流 帐户和余额 我需要根据以下内容合并 加入 两个流id and account id var accounts Rx Observable from id 1 name account 1 id 2 name account
  • 如何有条件地使用“平面图”运算符? (角度2/rxjs)

    我想要实现的是有条件地运行一系列可观察的结果 return observable map response gt response flatmap response1 gt observable1 response1 flatmap res
  • 如何使用 rxjs 5 观察对象变化

    我想监视一个对象 这样所有订阅者都会收到它的任何更改 我看到已经是了之前问过 https stackoverflow com questions 32683488 rxjs observing object updates and chan
  • 当超过 6 个参数时 Observable.forkJoin 返回错误类型

    我遇到 Observable forkJoin 的问题 它推断出错误的返回类型 然后在传递超过 6 个参数时导致错误 Observable forkJoin service getType1 service getType2 service
  • Angular6 - 读取文本/纯文本的响应正文

    我正在执行注册操作 当用户成功注册时 我会在后端返回他的 ID 例如 105 当注册失败 用户已存在 时 我返回 USER EXISTS 我已经在 Postman 上检查了请求 响应正文是正确的 在这两种情况下 我都会返回 纯文本 文本 但
  • Jasmine 监视 RxJS 5.5 操作员

    我正在尝试使用 Jasmine 监视 RxJS 操作员 在我的测试中有不同的用例 我希望控制 Observable 返回的内容 为了说明我正在尝试做的事情 我创建了上面的示例 尽管我认为它没有多大意义 因为此可观察值总是返回相同的硬编码字符
  • Angular 2 RxJS Observable:重试,429 状态除外

    我已经编写了 Observable 来自 HTTP 请求 以在失败时重试 不过 我想not如果服务器响应为重试429 Too many requests error 无论如何 当前的实现都会重试两次 间隔 1 秒 return this h
  • Angular2 可观察定时器条件

    我有一个计时器 initiateTimer if this timerSub this destroyTimer let timer TimerObservable create 0 1000 this timerSub timer sub

随机推荐