如何从RxJs中的flatMap返回附加值



我需要从下面的设置中的flatMap返回Observable之外的key字符串:

this.subscribeInit = this.tradingService.getInProgress()
.pipe(flatMap((s) => {
this.keys = s.map((tdi) => tdi.key);
return this.keys;
}),
flatMap((key) =>{
var res = this.tradingService.getTradingData(key);//returns `Observable<any>`
return res;
}))
.subscribe(res => {
console.log('Key is : ' + res.key);
}, 
undefined,
() => this.onComplete());

类似于:

flatMap((key) =>{
var res = this.tradingService.getTradingData(key);
return {res,key};
}))

如何做到这一点?

只需使用map。。。

flatMap((key) =>{
return this.tradingService.getTradingData(key).pipe(map((res) => {
return {res,key};
}));
}))

ps:我有点困惑:flatMap不是被弃用并取代了我的mergeMap、switchMap…吗?

edit:显然问题是由使用flatMap而不是mergeMap引起的。

您可以将对象作为函数参数进行析构函数

this.subscribeInit = this.tradingService.getInProgress()
.pipe(flatMap((s) => {
this.keys = s.map((tdi) => tdi.key);
return this.keys;
}),
flatMap((key) =>{
var res = this.tradingService.getTradingData(key);
return {res,key}; // pack res and key into object
}))
.subscribe(({res,key}) => { // destructuring previously returned object
console.log('Key is : ' + res[key]);
},
undefined,
() => this.onComplete());

const val1 = 'some val1', val2 = 'some val2';
Promise.resolve({val1, val2}).then(({val1, val2}) => {
	console.log(val1);
	console.log(val2);
});