CombineLatest 与 of 相比如何工作

How does CombineLatest work compared to of

我正在了解 forkJoin。与使用 of 创建可观察对象相比,我正在努力了解它的工作原理。请告诉我是否有这个权利:

当我使用 of 时,它会创建一个 observable,它会立即发出您传递给它的值。所以如果我有这个:

const obs = of('hello');

obs.subscribe(console.log);

...只要我订阅 obs 的行执行,它就会记录 'hello'。这是正确的吗?

现在如果我有这个:

const obs1 = httpClient.get(url1);

const obs2 = httpClient.get(url2);

const fjObs = forkJoin({obs1, obs2});

fjObs.subscribe(({obs1, obs2}) => console.log(`obs1=${obs1}, obs2=${obs2}`));

...它不会在我订阅 fjObs 的行执行后立即记录 obs1obs2。它只会在 obs1 和 obs2 都完成时记录它们,这可能是在我订阅 fjObs 之后的一段时间。这是正确的吗?

在此之前,fjObs 只是一个尚未发出任何值的可观察对象。对吗?

请让我知道我的理解是否正确。谢谢。

是的,你基本上是正确的。 请注意 forkJoin 接受一组可观察值,因此您的代码应该是:const fjObs = forkJoin([obs1, obs2]); 正如评论中所指出的,这个假设是错

你也可以测试这个: forkJoin([of('one'), of('two')]).subscribe(console.log); 在这种情况下,console.log 将立即执行,因为 of 都会立即发出。

您也可以这样做:forkJoin([of('one'), httpClient.get(url1)]).subscribe(console.log); 在这种情况下,它将在 HTTP 请求完成后记录。

您不应该将 offorkJoin 进行比较,因为它们是非常不同的概念。 of 创建一个 observable 并且 forkJoin 组合一个 observable 数组并在所有 发出一个值 完成时发出(每个 observable 的最后一个值)