gpt4 book ai didi

angular - 如何有条件地使用 'flatmap' 运算符? ( Angular 2/rxjs)

转载 作者:太空狗 更新时间:2023-10-29 17:45:31 32 4
gpt4 key购买 nike

我想要实现的是有条件地运行一系列可观察值。

return observable.map(response => response)
.flatmap(response1 => observable1(response1))
.flatmap(response2 => observable2(response2))
.flatmap(response3 => observable3(response3))

我需要检查 response1 并在需要时调用剩余的可观察对象,否则我需要返回 response1 并中断执行等等。

我已经完成了以下 SO 问题,但它们似乎没有回答我的问题

Conditionally choose observable in RxJS

RXJS if with observable as conditional

Handle Error in RxJs flatMap stream and continue processing

我是 rxjs 的新手,所以如果问题看起来太蹩脚,请原谅我。

任何帮助将不胜感激。

谢谢

最佳答案

这就像调用多个连续的 HTTP 请求,其中结果相互依赖。这是您要使用 concatMap() 的地方,因为它会等到从回调函数返回的 Observable 完成。

很难从您的描述中准确判断您想要做什么,但如果您需要停止传播结果(并避免调用不必要的 HTTP 请求),请查看 takeWhile() 运算符或简单的 filter() 运算符。

使用filter():

return observable
.concatMap(response => response)
.filter(response1 => response1.whatever === true)
.concatMap(response1 => observable1(response1))
.filter(response2 => response2.whatever === true)
.concatMap(response2 => observable2(response2))
.filter(response3 => response3.whatever === true)

如果项目未通过 filter 测试,这将不会进一步传播该项目。然而,源 observable 仍然可以发出将通过链的值。换句话说,filter 运算符不会完成链。

使用takeWhile():

return observable
.concatMap(response => response)
.takeWhile(response1 => response1.whatever === true)
.concatMap(response1 => observable1(response1))
.takeWhile(response2 => response2.whatever === true)
.concatMap(response2 => observable2(response2))
.takeWhile(response3 => response3.whatever === true)

如果 takeWhile() 中的任何一个结果为 false,它将完成链,并且不会发出其他值。

关于angular - 如何有条件地使用 'flatmap' 运算符? ( Angular 2/rxjs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705511/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com