我正在尝试发送帖子请求来创建/更新用户。当我收到 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);
},
});
我的代码有什么问题。早些时候,它运行良好。但突然我收到了这个错误。
而不是
throwError
尝试使用 of
运算符返回一个 Observable
...
return of( // <- changed here!
errors || {
title: 'An unknown error occurred!',
details: [
{
field: 'error',
message: errorRes.error.message,
},
],
}
);