angular - Angular 10-无法使用HttpClient delete()强制错误

标签 angular typescript error-handling httpclient

因此,我现在正在按照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/

相关文章:

AngularFire2 firestore take(1) 文档 valueChanges

angular - 从 Angular 9.17 升级到 9.19 后无法构建

node.js - npm install @types/jquery 导致名称无效 : "@types/jquery"

node.js - 穆特错误处理

go - 在响应中包含 err.Error() 总是安全的吗?

angular - 在 embeddedView 中访问容器组件的 FormGroupDirective

javascript - angular2.js 与 angular2.dev.js

angularjs - Angular 2 GET withCredentials(接受来自服务器的cookie)

javascript - Mongodb 与和尚 : error catching and handling if db is down

angular - 带有 Azure AD (MSAL) 的 Cypress