Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步分支和同步分支使用角度可观测值相遇_Javascript_Angular_Rxjs_Branch_Observable - Fatal编程技术网

Javascript 异步分支和同步分支使用角度可观测值相遇

Javascript 异步分支和同步分支使用角度可观测值相遇,javascript,angular,rxjs,branch,observable,Javascript,Angular,Rxjs,Branch,Observable,假设我们有一个简单的伪代码段,如下所示: if (myCondition){ // Async branch myObservable .somethingAsync() .subscribe(x => { doSomething(x); }); } else { // Sync branch somethingSync(); } continueBothHere(); 因此,一个异步分支和一个同步分支,其中continueBothHe

假设我们有一个简单的伪代码段,如下所示:

if (myCondition){
  // Async branch
  myObservable
    .somethingAsync()
    .subscribe(x => {
      doSomething(x);
    });
} else {
  // Sync branch
  somethingSync();
}
continueBothHere();
因此,一个异步分支和一个同步分支,其中continueBothHere()总是在if语句之后执行。 假设continueBothHere()不需要来自任何一个分支的任何输入

如何使用可观察对象实现这一点

我想我想在if语句之前定义一个Observable,这样我就可以在if语句之后使用它来连接分支?但这能与真实分支中的可观察性相结合吗?我要说的是,假象分支内部的可观察到的东西,如果有的话?也许这不需要使用if语句就可以实现



需要明确的是:在真正的分支中,我希望在执行doSomething(x)之后再执行continueBothHere()

当我处理
可观察的
时,我希望将其包括到异步链中,或者同步和异步操作中,它们应该具有相同的后续步骤,我通常从
新承诺开始。通过这种方式,您可以轻松地使代码异步,并在
然后
块中处理数据:

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

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

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

this.checkCondition.subscribe(result=>continueBothHere());
checkCondition():可观察{
if(霉菌病){
//异步分支
返回myObservable.somethingsync();
}否则{
//同步分支
返回(somethingSync())的可观测值;
}
subscribe(result=>continueBothHere());

是的,谢谢,这就是我们在angularjs中解决问题的方法。Observables是关于语法和功能的承诺的超集,我希望有一种可能的替代机制。可能只是使用变量(myObservable)在true分支中,也要控制整个程序流?很好,但是我如何将此想法作为方法中语句序列的一部分使用?在某些情况下,将if语句取出并将其放入单独的方法中可能会起作用,但在我的场景中,我有:statementA;if语句;statementB。因此您的checkCondition()定义和方法的以下调用必须替换“if statement”-我认为您不能这样做?更正:我的第一条注释的最后一部分应该是:…我有:statementA;if statement;continueBothHere();statementB。因此,您的checkCondition()定义和方法的以下调用必须替换“if语句;continueBothHere();”-我认为您不能这样做?您需要在任意位置分离方法,并将结果作为参数添加到continueBothHere(result)当一个方法包含同步代码、异步代码、其他东西,或者其他东西时,这是一种糟糕的做法……如果你不习惯使用If,你可以尝试使用,但我没有看到真正的代码,很难告诉你如何解决问题。