【问题标题】:RxJS race halts without completion of either streamRxJS 比赛在没有完成任一流的情况下停止
【发布时间】:2021-04-04 02:33:06
【问题描述】:

有以下sn-p的代码:

import { interval, race, Subject } from 'rxjs'; 
import { mapTo } from 'rxjs/operators';

const a$ = new Subject<number>();
const b$ = interval(1000).pipe(mapTo(1));
race([a$, b$]).subscribe(console.log);
a$.subscribe({complete: () => console.log('a$ completed!')});

[1,2,3,4,5,6,7].map(i => a$.next(i));

控制台中的输出是 1...7。 我对控制台输出的期望是,观察值 a$ 和 b$ 都没有完成,1、2、3、4、5、6、7、1、1、1、1、1、1...

在数组中的所有值都通过 a$ 发出之后,从 b$ 发出的值不通过。为什么会这样?竞赛操作员是否知道 a$ 不会再发出?如果是这样,比赛运营商是如何知道这一点的?

【问题讨论】:

    标签: typescript rxjs


    【解决方案1】:

    不知何故,在数组中的所有值都通过 a$ 发出之后,从 b$ 发出的值不会通过。为什么会这样?

    简单的答案可以在race operator的文档中找到。

    使用最先发射的 observable。

    由于您的数组的map 函数将立即运行,在b$ 发出任何内容之前,a$ 将始终“赢得”比赛并因此登录到控制台。 b$ 永远不会“赢”也不会完成。

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 2016-10-12
      • 2020-09-04
      • 2012-12-26
      • 2022-12-22
      • 2012-05-05
      • 2023-03-26
      相关资源
      最近更新 更多