让我们说我们有一个简单的伪代码片段,如下所示:
if (myCondition){
// Async branch
myObservable
.somethingAsync()
.subscribe(x => {
doSomething(x);
});
} else {
// Sync branch
somethingSync();
}
continueBothHere();
所以,一个异步分支和一个sync分支,其中continueBothHere()总是在if语句之后执行。让我们说continueBothHere()不需要来自任何一个分支的任何输入。
我如何使用Observables实现这一点?
我想我想在if语句之前定义一个Observable,所以我可以在if语句之后使用它来加入分支?但是,这可以与真正的分支中的观察结合起来吗?对于假分支中的Observable,我该说什么呢?也许这可以在不使用if语句的情况下实现?
为了清楚起见:在真正的分支中,我想执行doSomething(x),然后执行continueBothHere()
当我处理observable
,我想要包括异步链或同步和异步操作,这应该有相同的后续步骤,我通常从new Promise
开始。这样,您可以轻松地使代码异步并处理then
块中的数据:
new Promise (resolve => {
if (myCondition){
// Async branch
myObservable
.somethingAsync()
.take(1)
.subscribe(x => {
resolve(doSomething(x));
});
} else {
// Sync branch
resolve(somethingSync());
}
})
.then(data => {
// "data" will contain the result of "doSomething(x)" or "somethingSync()" execution, depending on "if" statement
continueBothHere();
})
您可以将sync分支包装到Observable中并在任何地方订阅结果。
checkCondition():Observable<any>{
if (myCondition){
// Async branch
return myObservable.somethingAsync();
} else {
// Sync branch
return Observable.of(somethingSync());
}
this.checkCondition.subscribe(result=>continueBothHere());