订阅如何运作

How Subscribe works

我正在学习 rxjs 并使用 observable 和 subscribe。我在 component.ts 文件中有以下方法,其中 returns true/false 来自 API

this.http.get(apiUrl+"/actionName")
  .subscribe(result=> 
 {
 if(result){
     //step1
 //1.show success message 
  //2.call the other method 
  //3.and after returned from here
}else{// not true
 //1. show error message 
//2. returned from here
 }
});
});
 //step2
 // call another function
 }

每当我订阅一个可观察对象时,它会立即跳到下一行,即第 2 步,然后首先调用另一个方法。我不想这样做。

我想先 运行 step1,直到它完全完成,然后才应该转到 step2。 提前谢谢你。

你的问题没有这么说,但我怀疑你的

//2.call the other method

行包含嵌套订阅或承诺。如果是这种情况,那么您的同步代码当然会在您的异步代码 运行 之前 运行。 JavaScript 是单线程环境,所以你永远不能等待其他代码到 运行.


相反,使用 RxJS 的各种运算符来为您管理代码的顺序。你想怎么做取决于你在做什么,但遗憾的是 call the other method 描述不够。

假设 theOtherMethod 和 anotherFunction 实际上是奇怪命名的 observables,那么你可能会这样做:

this.http.get(apiUrl+"/actionName").pipe(

  switchMap(result => {
    if(result){
      return theOtherMethod;
    }
    return of("There's no result")
  }),

  switchMap(otherMethodResult => anotherFunction)

).subscribe(anotherFunctionResult => {
  /* Ignore result?*/
});