RxJs 7.5中如何采用类似旧版combineLatest的方式组合多个Observable?
嘿,这个问题我刚不久前也碰到过,给你捋清楚怎么解决~
首先得明确:RxJS 7+ 其实并没有移除你熟悉的那种数组式combineLatest写法,只是你可能搞混了创建函数和管道操作符的区别。
你要的「类似旧版写法」最优方案
直接从rxjs导入combineLatest创建函数,用法和你旧版代码几乎完全一致,完全不需要依赖某个初始Observable,简洁又符合你的习惯:
import { combineLatest } from 'rxjs'; // 和你旧版写法逻辑一模一样! combineLatest([ this.userData.controls["name"].valueChanges, this.userData.controls["lastName"].valueChanges, this.userData.controls["age"].valueChanges, this.userData.controls["birthDate"].valueChanges ]).subscribe(([name, lastName, age, birthDate]) => { // 这里可以直接解构拿到每个Observable的值,比你之前的values[0]更清晰 console.log('组合后的数据:', name, lastName, age, birthDate); });
为什么你之前的combineLatestWith会报错?
combineLatestWith是一个管道操作符,它不能单独直接调用,必须依附在某个已有的Observable的.pipe()方法里使用——它的设计场景是:当你已经有一个Observable在流里,想要追加组合其他Observable时才用,比如:
import { combineLatestWith } from 'rxjs/operators'; this.userData.controls["name"].valueChanges.pipe( combineLatestWith([ this.userData.controls["lastName"].valueChanges, this.userData.controls["age"].valueChanges, this.userData.controls["birthDate"].valueChanges ]) ).subscribe(([name, lastName, age, birthDate]) => { // 处理数据 });
这种写法确实不如直接用combineLatest创建函数简洁,所以如果是要组合多个独立的Observable,直接用前者就好。
注意点
确保你导入的combineLatest是来自rxjs主包,而不是rxjs/operators——后者是旧版的操作符形式,现在创建函数都放在主包下了。
内容的提问来源于stack exchange,提问作者TheAnonymousModeIT
相关产品推荐
相关产品推荐

