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

时间:2016-08-02 06:51:07

标签: javascript angular rxjs rxjs5

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

我尝试了 pausable ,通过查看:RxJS: How can I do an "if" with Observables?,但遗憾的是无法让它工作。这是因为,没有导出的类pausable,rxjs v 5.0.0-beta.6。

根据答案,我已经提出了多远。

导出类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();
  }
希望,我能说清楚。即使我现在感到困惑。 :第

我是rxjs和反应式编程的新手。并且,任何帮助将不胜感激。

顺便说一句,谢谢你的到来。 :)

1 个答案:

答案 0 :(得分:1)

我想plausible你的意思是pausable?我不确定你在这里想要实现的是什么(控制流程?)。但是,如果您想在streamA生成值之后使用streamB值,则可以使用flatMap

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

这应该随时streamA发出streamB之后发出的值。

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

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

尚未对其进行测试,如果有效,请及时通知我。