如何在最后链接一个 observable 、一个常规同步函数和另一个 observable

我想利用pipe一个可观察的命令和链接,处理订阅中的输出数据,然后运行一个函数来转换数据,然后将结果输入到一个新的可观察函数。我试图将函数与管道链接起来,switchMap但我不确定如何提升并能够在两个可观察量之间插入转换函数

service.FirstFunction().pipe( 
     switchMap((info) => this.Transform(info),switchMap((data) => service.secondFunction(data))
 )
.subscription((x)=> this.Updatedata(x));

this.transform是一个常规函数,而不是一个可观察的函数


倚天杖
浏览 100回答 2
2回答

呼唤远方

看起来this.Transform没有返回可观察值,所以switchMap这里不需要。你可以直接使用map:service.FirstFunction().pipe(   map((info) => this.Transform(info),  switchMap((data) => service.secondFunction(data))).subscribe((x)=> this.Updatedata(x));另外,您可以通过传入函数来简化代码:service.FirstFunction().pipe(   map(this.Transform.bind(this)),  switchMap(service.secondFunction.bind(service))).subscribe(this.Updatedata.bind(this));您必须绑定,因为函数绑定到一个对象。如果函数中没有使用 this,则可以跳过绑定工作。顺便说一句,为了简化订阅工作,您还可以在此处使用 Tap:service.FirstFunction().pipe(   map(this.Transform.bind(this)),  switchMap(service.secondFunction.bind(service)),  tap(this.Updatedata.bind(this))).subscribe();

慕勒3428872

你很接近了。您不需要首先switchMap转换数据。它可以在单个switchMap.service.FirstFunction().pipe(  switchMap(info => service.secondFunction(this.Transform(info)))).subscription(  (x) => this.Updatedata(x));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript