Javascript 如何仅在前一个observable返回特定值时执行回调

Javascript 如何仅在前一个observable返回特定值时执行回调,javascript,rxjs,Javascript,Rxjs,假设我有3个函数,每个函数都返回一个可观测值。每个可观察对象将只发出一个值-true或false。只有当前一个返回true时,我才想一个接一个地调用它们。否则,我只想返回false并结束可观察的。我该怎么做 承诺很容易: return fn1().then(fn2).then(fn3).catch((v)=>{return v}) 一旦链中的任何函数以false拒绝承诺,将不会调用其他承诺回调,并且解析的承诺值将为false。我正在寻找类似于Observable的东西。您可以使用conc

假设我有3个函数,每个函数都返回一个可观测值。每个可观察对象将只发出一个值-
true
false
。只有当前一个返回
true
时,我才想一个接一个地调用它们。否则,我只想返回
false
并结束可观察的。我该怎么做

承诺很容易:

return fn1().then(fn2).then(fn3).catch((v)=>{return v})

一旦链中的任何函数以
false
拒绝承诺,将不会调用其他承诺回调,并且解析的承诺值将为
false
。我正在寻找类似于Observable的东西。

您可以使用
concatMap()
按顺序执行异步任务,然后
takeWhile()
在必要时完成流:

fn1()
  .takeWhile(res => res)
  .concatMap(() => fn2())
  .takeWhile(res => res)
  .concatMap(() => fn3())
  .takeWhile(res => res)
  .subscribe(...)

谢谢,你认为你能给出一些直观的解释吗?
takeWhile
期望一个回调函数接受一个参数,并且必须返回
true/false
。由于您的逻辑仅基于上一次调用的返回值,因此您可以立即返回它。你也可以写
takeWhile(Boolean)
,但可能会有点混乱。是的,谢谢,我在发布评论后10秒就发现了这一点,所以我删除了它:)发布了另一条。请看一下文档中的图表:和。我不知道我自己是如何将嵌套的观测可视化的……我见过这些,好吧,没关系。您是否还知道如何使用全局
Rx
对象访问操作员?这是有效的,但是这是正确的方法吗?假设我不使用ES6模式