在调用另一个流之前等待一个流
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})
还没有测试过,所以如果可行的话请告诉我最新消息。
如何等待一个流(例如,StreamA
)变为 return 非空值,然后调用 StreamB
订阅函数。我对 StreamA
的价值不是特别感兴趣。反过来,我试图获取 StreamB
的值,该值可能在 StreamA returned 非空值之前更新,并且可能没有任何新事件。
我试过,pausable,通过查看这个: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})
还没有测试过,所以如果可行的话请告诉我最新消息。