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

Javascript 如何从RxJs中的flatMap返回附加值,javascript,angular,rxjs,Javascript,Angular,Rxjs,我需要从下面的设置中返回除可观察值以外的附加值,keystring fromflatMap: this.subscribeInit = this.tradingService.getInProgress() .pipe(flatMap((s) => { this.keys = s.map((tdi) => tdi.key); return this.keys; }), flatMap((key) =>{ var res = this.tradingSer

我需要从下面的设置中返回除可观察值以外的附加值,
key
string from
flatMap

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());

如何实现这一点?

您可以将对象分解为函数参数

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';
解析({val1,val2})。然后({val1,val2})=>{
控制台日志(val1);
console.log(val2);

});您可以将对象分解为函数参数

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';
解析({val1,val2})。然后({val1,val2})=>{
控制台日志(val1);
console.log(val2);
});只需使用地图

flatMap((key) =>{
    return this.tradingService.getTradingData(key).pipe(map((res) => {
        return {res,key};
    }));
}))
ps:我有点困惑:flatMap不是被弃用并取代了我的mergeMap,switchMap

编辑:显然问题是使用flatMap而不是mergeMap造成的。

只需使用map

flatMap((key) =>{
    return this.tradingService.getTradingData(key).pipe(map((res) => {
        return {res,key};
    }));
}))
ps:我有点困惑:flatMap不是被弃用并取代了我的mergeMap,switchMap


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

已经尝试过了。错误:类型为“(key:string)=>{res:Observable;key:string;}”的参数不可分配给类型为“(value:string,index:number)=>ObservableInput”的参数,请验证它不起作用,正如我提到的,我得到的错误与我之前的注释一样。您需要为此关闭类型检查。已经尝试过此操作。错误:类型为“(key:string)=>{res:Observable;key:string;}”的参数不可分配给类型为“(value:string,index:number)=>ObservableInput”的参数,请验证它不起作用,正如我前面提到的,我得到的错误与我之前的注释一样。您需要为此关闭类型检查。类型为“(key:string)的参数不起作用=>void'不可分配给类型为“(值:字符串,索引:编号)=>ObservableInput”的参数。getTradingData的返回类型是什么?它返回
Observable
您说得对,“flatMap是mergeMap的别名!”一旦我从
flatMap
更改为
mergeMap
。成功了。非常感谢!您可能希望将您的答案更改为使用
mergeMap
。您是否仍有平面图的导入语句?可能是您从错误的位置导入的吗?类型为“(key:string)=>void”的参数不能分配给类型为“(value:string,index:number)=>observeInput)的参数。getTradingData的返回类型是什么?它返回
observeable
您说得对,“flatMap是mergeMap的别名!”一旦我从
flatMap
变成
mergeMap
。成功了。非常感谢!您可能希望将您的答案更改为使用
mergeMap
。您是否仍有平面图的导入语句?可能是您从错误的位置导入的吗?