为什么 first() rxjs 运算符不断返回数组



>我有一个类型函数的服务

getSummary(id: string, universe: string): Observable<INTsummary[]>

当我调用它时,我只想要INTsummary[]中的第一项,所以我尝试使用 rxjsfirst运算符来执行此操作:

loadQuickSummary(){
var obj = this.myService.getSummary(this.user.id, this.user.universe).first();
console.log("getting quick summary");
obj.subscribe(r => {
console.log(`first value ${JSON.stringify(r)}`)
})
}

从阅读文档和堆栈溢出中,这应该返回一个对象,但我取而代之的是INTsummary数组。

如何只返回INTsummary[]数组中的第一个对象?

first()返回可观察量的第一个发射。因此,当您有像INTsummary[]这样的源发出数组时,它会采用它发出的第一个数组(而不是数组中的第一项(。

从您的描述中,您希望获取数组中的第一项,因此有两种方法:

this.myService.getSummary(this.user.id, this.user.universe)
.map(array => array[0])

。或者,如果您确实想使用first()运算符:

this.myService.getSummary(this.user.id, this.user.universe)
.concatAll() // flatten the array into separate emission
.first()

对,但返回的对象是一个数组,此类型表示:

Observable<INTsummary[]>

如果它返回纯对象,您将拥有:

Observable<INTsummary>

您可以使用mergeMap运算符来平展数组:

var obj = this.myService.getSummary(this.user.id, this.user.universe).first().mergeMap(r => r);

相关内容

  • 没有找到相关文章

最新更新