使用Angular Observable进行异步分支和同步分支

问题描述 投票:2回答:2

让我们说我们有一个简单的伪代码片段,如下所示:

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()

javascript angular rxjs branch observable
2个回答
1
投票

当我处理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();
})

1
投票

您可以将sync分支包装到Observable中并在任何地方订阅结果。

checkCondition():Observable<any>{
 if (myCondition){
  // Async branch
  return myObservable.somethingAsync();
 } else {
  // Sync branch
  return Observable.of(somethingSync());
}

this.checkCondition.subscribe(result=>continueBothHere());
© www.soinside.com 2019 - 2024. All rights reserved.