在调用另一个流之前等待一个流

Wait for a stream before invoking another stream

如何等待一个流(例如,StreamA)变为 return 非空值,然后调用 StreamB 订阅函数。我对 StreamA 的价值不是特别感兴趣。反过来,我试图获取 StreamB 的值,该值可能在 StreamA returned 非空值之前更新,并且可能没有任何新事件。

我试过,pausable,通过查看这个:,但不幸的是无法让它工作。这是因为,没有导出 class pausable, rxjs v 5.0.0-beta.6.

这是我根据答案得出的结果。

导出class AuthService { userModel: FirebaseListObservable = this.af.database.list(/users); 构造函数(私有 af:AngularFire){

    var user = this.currentAuthor();
    var userStream = user;

    this.af.auth.flatMap((d) => { console.log(d);return this.userModel.publishReplay(1); });

    this.userModel
      .subscribe((data) => {
        var flag = false;
        data.forEach((item) => {
          if (item.$key && item.$key === user.uid) {
            flag = true;
            return;
          }
        });

        if (flag) {
          console.log('hello');
        } else {
          this.userModel.push({
              firstName: user.auth.displayName.substr(0, user.auth.displayName.lastIndexOf(' ')),
              lastName: user.auth.displayName.substr(user.auth.displayName.lastIndexOf(' '), user.auth.displayName.length),
              displayPic: user.auth.photoURL,
              provider: user.provider,
              uid: user.uid
            }
          );
        }
      })
  }
  public currentAuthor():FirebaseAuthState  {
    return this.af.auth.getAuth();
  }

希望,我能说清楚。连我现在都糊涂了。 :p.

我是 rxjs 和响应式编程的新手。并且,我们将不胜感激。

而且,顺便说一句,感谢您的光临。 :)

我想 plausible 你的意思是 pausable?我不确定你到底想在这里实现什么(控制流程?)。但是,如果你想在 streamA 产生一个值之后再得到 streamB 的值,那么你可以使用 flatMap.

streamA.flatMapLatest(function (_){return streamB})

那应该给你,任何时候 streamA 发出,在那次之后由 streamB 发出的值。

如果你想要的值包括那个时间之前发出的最后一个 B,你可以使用 streamBB = streamB.publishReplay(1)

streamA.flatMapLatest(function (_){return streamBB})

还没有测试过,所以如果可行的话请告诉我最新消息。