为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2023-07-29 13:43:47
我想利用pipe一个可观察的命令和链接,处理订阅中的输出数据,然后运行一个函数来转换数据,然后将结果输入到一个新的可观察函数。我试图将函数与管道链接起来,switchMap但我不确定如何提升并能够在两个可观察量之间插入转换函数service.FirstFunction().pipe(       switchMap((info) => this.Transform(info),switchMap((data) => service.secondFunction(data))  ) .subscription((x)=> this.Updatedata(x));this.transform是一个常规函数,而不是一个可观察的函数
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

看起来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();


查看完整回答
反对 回复 2023-07-29
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

你很接近了。您不需要首先switchMap转换数据。它可以在单个switchMap.


service.FirstFunction().pipe(

  switchMap(info => service.secondFunction(this.Transform(info)))

).subscription(

  (x) => this.Updatedata(x)

);


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信