订阅如何运作
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?*/
});
我正在学习 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?*/
});