如何在 rxjs 6 中订阅多个 observable? do 不是 rxjs 6 中的函数

How to subscribe multiple observable in rxjs 6 ? do is not a function in rxjs 6

rxjs 5.5.12 中,我创建了一个 login()subscribe 并由 do()

多次观察
login(userEmail, userPassword).subscribe((response) => {
  console.log(response);

  if (response === 'something') {
    // some actions
  } else {
    // some actions
  }
},(error) => {
  // some error actions
});

我使用 rxLoginPOST 调用 api:

rxLoginPOST(url, params) {
  return Rx.Observable.fromPromise(somePromise).catch(handleErrFunction);
}

我在登录函数中使用它 return 多个可观察到的:

login(email, password) {
  return APIService.shared.rxLoginPOST('users/signin', { ...arguments })
  .flatMap((response) => {
    if (response.status === 200) {
        return Rx.Observable.combineLatest(
          myObservable1,
          myObservable2,
          myObservable3
        )
      } else {
        return Rx.Observable.of(response)
      }
  }).do((result) => {
      if (result.length > 0) {
        // some logic
      } else {
        return Rx.Observable.of(result)
      }
  }).flatMap((result) => {
      if (result.length > 0) {
        return this.checkUserIsRegistered()
      } else {
        return Rx.Observable.of(result)
      }
  })
}

rxjs 6.5.3 中,我更改了所有导入,如

import { Observable, combineLatest, of } from 'rxjs';
import { mergeMap, map, catchError, flatMap, tap } from 'rxjs/operators';

如果我触发 login() 它将显示 do is not a function

所以我更改代码:

login(userEmail, password) {
    return APIService.shared.rxLoginPOST('users/signin', { ...arguments }).pipe(
        mergeMap((response) => {
        if (response.status === 200) {
          return combineLatest(
            myObservable1,
            myObservable2,
            myObservable3
          )
        } else {
          return of(response)
        }
      }).tap((result) => { // I am stuck here, I have no idea how to continue with it...
         console.log('check 4');  // check 4 does not appear.
         console.log('response', response);
         return of(response)
      }
    );

我尝试用tap代替do,但是check 4没有出现。

如有任何帮助,我们将不胜感激。

对于 pipe,您应该像这样链接您的运算符:pipe(op1, op2) 而不是 pipe(op1).op2()

login(userEmail, password) {
    return APIService.shared.rxLoginPOST('users/signin', { ...arguments })
      .pipe(
          mergeMap((response) => {
            if (response.status === 200) {
              return combineLatest(
                myObservable1,
                myObservable2,
                myObservable3
              )
            }
            return of(response)
          }),
          tap((result) => { 
            console.log('check 4');  // check 4 does not appear.
            console.log('response', response);
          })
        );

我还删除了你无用的 else 声明,因为你之前退货了:)

编辑:正如评论中所建议的那样,tap 中的 return 指令也已删除,因为不必要的