Joe*_*aju 4 rxjs ecmascript-6 flatmap rxjs5 angular
我想要实现的是有条件地运行一系列可观察量.
return observable.map(response => response)
.flatmap(response1 => observable1(response1))
.flatmap(response2 => observable2(response2))
.flatmap(response3 => observable3(response3))
Run Code Online (Sandbox Code Playgroud)
我需要检查response1并在需要时调用剩余的observable,否则我需要返回response1并中断执行,依此类推.
我已经完成了以下SO问题,但他们似乎没有回答我的问题
我是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)
Run Code Online (Sandbox Code Playgroud)
如果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)
Run Code Online (Sandbox Code Playgroud)
如果任何takeWhile()
结果为false,它将完成链并且不能发出其他值.
归档时间: |
|
查看次数: |
7207 次 |
最近记录: |