在 Angular Rxjs 中,catchError 因 TypeError 而失败

问题描述 投票:0回答:1

我正在尝试发送帖子请求来创建/更新用户。当我收到 400 响应时,catchError 函数失败并显示

TypeError:您在需要流的地方提供了无效的对象。 您可以提供 Observable、Promise、ReadableStream、Array、 异步迭代,或可迭代。 在 createInvalidObservableTypeError (throwUnobservableError.js:2:12) 在innerFrom(innerFrom.js:37:11) 在 catchError.js:10:29

我的错误响应对象是,

{
  "isSuccess": false,
  "message": "User with same email already registered.",
  "responseObject": {
    "id": 0,
    "name": "" 
  }
}

我的代码是,

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';

import { environment } from '../../../../environments/environment';

@Injectable({ providedIn: 'root' })
export class CreateUser {
  constructor(private http: HttpClient) {}

  createIcUser(request: object) {
    return this.http
      .post<any>(`${environment.URL}/api/users`, request)
      .pipe(catchError(this.handleError));
  }

  updateIcUser(id: string, request: object) {
    return this.http
      .put<any>(`${environment.URL}/api/users/${id}`, request)
      .pipe(catchError(this.handleError));
  }

  private handleError(errorRes: HttpErrorResponse) {
    console.log(errorRes)
    let errors = { title: errorRes.error.title, details: [] };
    if (
      typeof errorRes.error.errors === 'object' &&
      errorRes.error.errors !== null &&
      Object.keys(errorRes.error.errors).length > 0
    ) {
      errors.details = Object.keys(errorRes.error.errors).map((field) => ({
        field,
        message: errorRes.error.errors[field].join(', '),
      }));
    } else {
      if (errorRes.error.isSuccess === false) {
        errors.title = 'Server Error';
        errors.details.push({
          field: 'error',
          message: errorRes.error.message,
        });
      }
    }

    return throwError(
      () =>
        errors || {
          title: 'An unknown error occurred!',
          details: [
            {
              field: 'error',
              message: errorRes.error.message,
            },
          ],
        }
    );
  }
}

我的订阅代码是,

let updateUserObs: Observable<any>;
    if (!this.isEditMode) {
      updateUserObs = this.createUserService.createIcUser(
        this.getProperties({ isEditMode: false })
      );
    } else {
      updateUserObs = this.createUserService.updateIcUser(
        this.guid,
        this.getProperties({ isEditMode: true })
      );
    }

    this.subscription = updateUserObs.subscribe({
      next: (resData) => {
        this.selectedIcUser.clear();
        this.router.navigate(['/dashboard/users'], {
          state: {
            id: this.selectedCompany.company.id,
            success: true,
            isEditMode: this.isEditMode,
          },
        });
      },
      error: (errors) => {
        this.showErrorModal = true;
        this.errorData = errors;
        console.error('from subscription', errors);
      },
    });

我的代码有什么问题。早些时候,它运行良好。但突然我收到了这个错误。

javascript angular rxjs rxjs-observables
1个回答
0
投票

而不是

throwError
尝试使用
of
运算符返回一个 Observable

    ...
    return of( // <- changed here!
        errors || {
          title: 'An unknown error occurred!',
          details: [
             {
                  field: 'error',
                  message: errorRes.error.message,
             },
          ],
        }
    );
© www.soinside.com 2019 - 2024. All rights reserved.