【问题标题】:Why does combineLatest runs in this context but forkJoin fails to为什么 combineLatest 在这种情况下运行但 forkJoin 失败
【发布时间】:2021-10-11 23:47:05
【问题描述】:

我正在研究 rxjs,这对我来说似乎很奇怪,这是 rxjs 文档中的一个示例,我尝试用 forkJoin 替换 combineLatest 并且它不起作用(未调用订阅者函数),我相信它应该因为我们已经用 startsWith(0) 启动了 obeservables

import { fromEvent, combineLatest, forkJoin } from "rxjs";
import { mapTo, startWith, scan, tap, map } from "rxjs/operators";

// elem refs
const redTotal = document.getElementById("red-total");
const blackTotal = document.getElementById("black-total");
const total = document.getElementById("total");

const addOneClick$ = (id) =>
  fromEvent(document.getElementById(id), "click").pipe(
    // map every click to 1
    mapTo(1),
    // keep a running total
    scan((acc, curr) => acc + curr, 0),
    startWith(0)
  );

combineLatest(addOneClick$("red"), addOneClick$("black")).subscribe(
  ([red, black]) => {
    redTotal.innerHTML = red;
    blackTotal.innerHTML = black;
    total.innerHTML = red + black;
    console.log(red, black);
  }
);
<!DOCTYPE html>
<html>

<head>
    <title>Parcel Sandbox</title>
    <meta charset="UTF-8" />
</head>

<body>
    <div>
        <button id="red">Red</button>
        <button id="black">Black</button>
    </div>
    <div>Red: <span id="red-total"></span></div>
    <div>Black: <span id="black-total"></span></div>
    <div>Total: <span id="total"></span></div>

    <script src="src/index.js">
    </script>
</body>

</html>

【问题讨论】:

    标签: javascript angular rxjs observable


    【解决方案1】:

    combineLatest() 在每个 observable 发出一个值时开始发射。 forkJoin() 在每个 observable 完成后开始发射。 fromEvent() 不会发送完整的信号,这就是为什么使用forkJoin() 不会发出任何信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2014-05-31
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多