因此,我现在正在按照Angular教程进行操作,并且目前仍在错误处理章节中,因为我无法在向HttpClient.delete()请求提供错误数据时强制显示错误。
我已经删除了那部分,但是我从http://jsonplaceholder.typicode.com/posts获取数据(帖子)。
我试图在多个地方使用具有错误ID的delete-function进行馈送。
我使用的ID应该超出边界,例如1,应该在单击“删除”按钮两次后将其删除,但是没有任何错误会导致错误。
相反,它正在做的很好,这意味着它正在清空我的帖子列表,并且通过完全删除我单击的帖子来做到这一点。
我曾尝试通过消除错误服务并在posts组件中进行所有操作来简化它,但这没有帮助。
posts.component.ts
import { BadInputError } from './../common/bad-input';
import { NotFoundError } from './../common/not-found-error';
import { PostService } from './../services/post.service';
import { Component, Input, OnInit } from '@angular/core';
import { AppError } from '../common/app-error';
@Component({
selector: 'posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
posts: any[];
constructor(private service: PostService) { }
// ...
deletePost(post) {
this.service.deletePost(post.id).subscribe(
response => {
console.log(response);
let index = this.posts.indexOf(post);
this.posts.splice(index, 1);
},
(error: AppError) => {
if (error instanceof NotFoundError)
alert('This post has already been deleted.');
else {
alert('An unexpected error occured.');
console.log(error);
}
}
);
console.log(this.posts);
}
}
posts.component.html<ul class="list-group">
<li
*ngFor="let post of posts"
class="list-group-item">
<button
(click)="deletePost(post)"
class="btn btn-default btn-sm">
Delete
</button>
{{ post.title }}
</li>
</ul>
邮政服务export class PostService {
private url = 'http://jsonplaceholder.typicode.com/posts';
constructor(private http: HttpClient) { }
// ...
deletePost(id) {
return this.http.delete(this.url + '/' + id)
.pipe(
catchError((error: HttpErrorResponse) => {
if (error.status === 404)
// throw Observable.throw(new NotFoundError);
throw throwError(error);
//return Observable.throw(new NotFoundError);
else
return Observable.throw(new AppError(error));
})
);
}
}
应用错误export class AppError {
constructor(public originalError?: any) {}
}
找不到错误import { AppError } from './app-error';
export class NotFoundError extends AppError {}
输入错误import { AppError } from './app-error';
export class BadInputError extends AppError {}
我将非常感谢有人向我解释,我做错了什么以及如何强制错误来测试我的应用程序。亲切的问候
最佳答案
因此,这并不是我的问题/解决方案的答案,但至少我现在知道如何测试错误处理。
我可以在执行它的主体之前将一个错误抛出到错误处理函数中:
delete(id) {
return throwError(new NotFoundError);
return this.http.delete(this.url + '/' + id)
.pipe(
catchError(this.handleError)
);
}
关于angular - Angular 10-无法使用HttpClient delete()强制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64767828/