RxJS concat操作符:已完成Observable会被重复执行吗?
RxJS concat操作符行为疑问解答
第一个问题:初始请求完成后发起搜索,concat是否会重新执行initialLessons$?
不会重新执行initialLessons$,concat的核心逻辑是按顺序依次订阅每个源Observable,只有当前Observable完成后才会订阅下一个:
initialLessons$作为HTTP请求Observable,仅在首次被订阅时发起请求,完成后就不会再产生新值或触发请求。- 当它完成后,
concat会立刻订阅后续的searchLessons$,之后searchLessons$触发的搜索请求,只会走自身的逻辑,不会回头重新订阅或执行已完成的initialLessons$,不存在资源浪费的问题。
第二个问题:第一个Observable执行后,第二个已完成/无需执行,concat是否仍会执行后续?
concat会严格按顺序尝试订阅所有传入的Observable:
- 如果
searchLessons$已经处于完成状态(比如手动调用了complete()),concat订阅它后会立即完成,不会产生任何额外操作。 - 如果
searchLessons$是未完成的(比如正常的fromEvent事件监听,未手动完成),concat会一直等待它发出值或完成,不会跳过它直接结束。
内容的提问来源于stack exchange,提问作者MarcL
相关产品推荐
相关产品推荐

