如何仅在第一个方法 returns 可观察后调用第二个方法?
How to call second method only after first method returns observable?
buttonClicked() {
let num = 0;
this.myService.myFirstMethod().subscribe(response=> {
num = response.result;
});
this.myService.mySecondMethod(num).subscribe(response=> {
console.log(response);
});
}
如何仅在第一个方法返回时才调用第二个方法,像 Promise 中的 .then
一样链接它们?
您可以使用switchMap
buttonClicked() {
this.myService
.myFirstMethod()
.pipe(switchMap(response => {
const num = response.result;
return this.myService.mySecondMethod(num)
}))
.subscribe(response => {
console.log(response);
});
}
您可以使用“Higher order mapping operator”(switchMap
、mergeMap
、concatMap
、exhaustMap
)将一个可观察发射映射到另一个可观察发射。
如果您的 myFirstMethod()
只发出一个值,那么您使用哪个并不重要,让我们 switchMap
,例如:
buttonClicked() {
this.myService.myFirstMethod().pipe(
switchMap(num => this.myService.mySecondMethod(num))
).subscribe(secondResponse => {
console.log(secondResponse);
});
}
您将 returns 可观察到的函数传递给 switchMap
。这个“inner observable”将被 switchMap 内部订阅(和取消订阅)。然后发出来自“内部可观察”的排放。因此,它本质上是将可观察#1 的排放映射到可观察#2 的排放。
buttonClicked() {
let num = 0;
this.myService.myFirstMethod().subscribe(response=> {
num = response.result;
});
this.myService.mySecondMethod(num).subscribe(response=> {
console.log(response);
});
}
如何仅在第一个方法返回时才调用第二个方法,像 Promise 中的 .then
一样链接它们?
您可以使用switchMap
buttonClicked() {
this.myService
.myFirstMethod()
.pipe(switchMap(response => {
const num = response.result;
return this.myService.mySecondMethod(num)
}))
.subscribe(response => {
console.log(response);
});
}
您可以使用“Higher order mapping operator”(switchMap
、mergeMap
、concatMap
、exhaustMap
)将一个可观察发射映射到另一个可观察发射。
如果您的 myFirstMethod()
只发出一个值,那么您使用哪个并不重要,让我们 switchMap
,例如:
buttonClicked() {
this.myService.myFirstMethod().pipe(
switchMap(num => this.myService.mySecondMethod(num))
).subscribe(secondResponse => {
console.log(secondResponse);
});
}
您将 returns 可观察到的函数传递给 switchMap
。这个“inner observable”将被 switchMap 内部订阅(和取消订阅)。然后发出来自“内部可观察”的排放。因此,它本质上是将可观察#1 的排放映射到可观察#2 的排放。