首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

捕获HttpInterceptor上的已取消/中止请求。Angular8

在Angular 8中,可以通过HttpInterceptor来捕获已取消或中止的请求。HttpInterceptor是一个接口,用于拦截HTTP请求和响应,并可以对它们进行处理或修改。

要捕获已取消或中止的请求,可以在HttpInterceptor的intercept方法中进行处理。以下是一个示例:

代码语言:txt
复制
import { Injectable } from '@angular/core';
import import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class CancelledRequestInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      tap(
        event => {
          // 处理请求成功的情况
        },
        error => {
          if (error.name === 'HttpErrorResponse' && error.status === 0) {
            // 捕获已取消或中止的请求
            console.log('请求已取消或中止');
          }
        }
      )
    );
  }
}

在上面的示例中,我们创建了一个名为CancelledRequestInterceptor的HttpInterceptor类。在intercept方法中,我们使用tap操作符来处理请求的成功和失败情况。如果请求失败,并且错误的name属性为'HttpErrorResponse',并且错误的status属性为0,那么我们就可以确定该请求已被取消或中止。

要在Angular应用程序中使用该拦截器,需要将其提供给HttpClientModule。可以在app.module.ts文件中的providers数组中添加以下代码:

代码语言:txt
复制
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { CancelledRequestInterceptor } from './cancelled-request.interceptor';

@NgModule({
  imports: [HttpClientModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CancelledRequestInterceptor,
      multi: true
    }
  ]
})
export class AppModule { }

通过以上配置,CancelledRequestInterceptor将会拦截所有的HTTP请求,并在请求被取消或中止时进行处理。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),腾讯云对象存储(COS)。

腾讯云云服务器(CVM)是一种可弹性伸缩的云计算服务,提供了高性能、可靠稳定的虚拟服务器。您可以根据业务需求选择不同的配置和规格,快速创建和管理云服务器实例。

腾讯云对象存储(COS)是一种安全、低成本、高可扩展的云端存储服务,适用于存储和处理各种类型的数据。它提供了简单易用的API接口,可以方便地进行文件上传、下载、管理和访问控制等操作。

更多关于腾讯云云服务器和对象存储的信息,请访问以下链接:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
相关搜索:如何中止/取消由Javascript代码引起的HTTP请求?在已取消的光纤上连接当在完成前中止请求时,火狐上的NetworkError正在获取“请求已中止,因为没有可用的实例。”对于Firebase函数Spring Boot应用程序无法加入服务器上的Coherence群集:加入请求已中止WooCommerce订阅:删除已取消订阅上的角色没有内核映像可用于在设备上执行致命的Python错误:已中止当AJAX请求中止时在Redshift上停止SQL查询的替代方案是什么原因导致“在尝试为您的请求提供服务的等待时间过长后,请求已中止”?请求已中止:无法创建SSL/TLS安全通道-使用其他解决方案中的库时如何在GitHub拉流请求中取消查看/切换所有已查看的文件?Windows10上的docker镜像构建“上下文已取消”错误在表单上的自定义验证器中的valueChanges上的“ObjectUnsubscribedError对象已取消订阅”如何在已打开的chromedriver选项卡上请求数据?无法获取React (非CORS) -浏览器中已取消从Fetch API发出的POST请求在Ruby on Rails上的客户端取消对后端的请求后会发生什么?Heroku上的Angularjs应用程序: HTTPS请求被取消,取而代之的是HTTP请求,由于内容混杂而被屏蔽dnn在模块中的linkedin api v2调用中给出HttpClient错误‘请求已中止:无法创建SSL/TLS安全通道’即使cy.wait仍在进行中,Cypress截获的接口请求也已取消(使用Err_empty_Reposnse)如果Snowflake上的DBeaver查询持续约5分钟,则会显示"SQL Error [604] [57014]:SQL执行已取消“。
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • java中断机制zz

    一般的代码中,尤其是作为一个基础类库时,绝不应当吞掉中断,即捕获到InterruptedException后在catch里什么也不做,清除中断状态后又不重设中断状态也不抛出InterruptedException等。因为吞掉中断状态会导致方法调用栈的上层得不到这些信息。 当然,凡事总有例外的时候,当你完全清楚自己的方法会被谁调用,而调用者也不会因为中断被吞掉了而遇到麻烦,就可以这么做。 总得来说,就是要让方法调用栈的上层获知中断的发生。假设你写了一个类库,类库里有个方法amethod,在amethod中检测并清除了中断状态,而没有抛出InterruptedException,作为amethod的用户来说,他并不知道里面的细节,如果用户在调用amethod后也要使用中断来做些事情,那么在调用amethod之后他将永远也检测不到中断了,因为中断信息已经被amethod清除掉了。如果作为用户,遇到这样有问题的类库,又不能修改代码,那该怎么处理?只好在自己的类里设置一个自己的中断状态,在调用interrupt方法的时候,同时设置该状态,这实在是无路可走时才使用的方法。 2、 中断的响应 程序里发现中断后该怎么响应?这就得视实际情况而定了。有些程序可能一检测到中断就立马将线程终止,有些可能是退出当前执行的任务,继续执行下一个任务……作为一种协作机制,这要与中断方协商好,当调用interrupt会发生些什么都是事先知道的,如做一些事务回滚操作,一些清理工作,一些补偿操作等。若不确定调用某个线程的interrupt后该线程会做出什么样的响应,那就不应当中断该线程。 4. Thread.interrupt VS Thread.stop Thread.stop方法已经不推荐使用了。而在某些方面Thread.stop与中断机制有着相似之处。如当线程在等待内置锁或IO时,stop跟interrupt一样,不会中止这些操作;当catch住stop导致的异常时,程序也可以继续执行,虽然stop本意是要停止线程,这么做会让程序行为变得更加混乱。 那么它们的区别在哪里?最重要的就是中断需要程序自己去检测然后做相应的处理,而Thread.stop会直接在代码执行过程中抛出ThreadDeath错误,这是一个java.lang.Error的子类。 在继续之前,先来看个小例子: 01 package com.ticmy.interrupt; 02 import java.util.Arrays; 03 import java.util.Random; 04 import java.util.concurrent.TimeUnit; 05 public class TestStop { 06 private static final int[] array = new int[80000]; 07 private static final Thread t = new Thread() { 08 public void run() { 09 try { 10 System.out.println(sort(array)); 11 } catch (Error err) { 12 err.printStackTrace(); 13 } 14 System.out.println("in thread t"); 15 } 16 }; 17 18 static { 19 Random random = new Random(); 20 for(int i = 0; i < array.length; i++) { 21 array[i] = random.nextInt(i + 1); 22 } 23 } 24 25 private static int sort(int[] array) { 26 for (int i = 0; i < array.length-1; i++){ 27 for(int j = 0 ;j < a

    03
    领券