我有一个类型为
的函数的服务 getSummary(id: string, universe: string): Observable<INTsummary[]>
当我打电话给我时,我只想要INTsummary[]
中的第一项,所以我试图使用rxjs first
运算符来执行此操作:
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)}`)
})
}
从阅读文档和stackoverflow,这应该返回一个对象,但我得到一个INTsummary
的数组。
如何才能找回INTsummary[]
数组中的第一个对象?
答案 0 :(得分:5)
first()
返回Observable的第一次发射。因此,当您拥有发出类似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()
答案 1 :(得分:1)
是的,但是返回的对象是一个数组,这个类型表示的是:
Observable<INTsummary[]>
如果返回普通对象,您将拥有:
Observable<INTsummary>
您可以使用mergeMap
运算符展平数组:
var obj = this.myService.getSummary(this.user.id, this.user.universe).first().mergeMap(r => r);