如何仅在第一个方法 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”(switchMapmergeMapconcatMapexhaustMap)将一个可观察发射映射到另一个可观察发射。

如果您的 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 的排放。