>我有一个类型函数的服务
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);