Angular 2 RxJS Observable:重试,429 状态除外

2024-04-12

我已经编写了 Observable(来自 HTTP 请求)以在失败时重试。不过,我想not如果服务器响应为重试429 Too many requests error.

无论如何,当前的实现都会重试两次,间隔 1 秒。

return this.http.get(url,options)
    .retryWhen(errors => {
        return errors.delay(1000).take(2);
    })
    .catch((res)=>this.handleError(res));

errors是一个可观察的。我怎样才能获得底层Response导致错误的对象?有了它,我可以访问服务器的状态代码,并且只有在不是 429 时才重试:

return this.http.get(url,options)
    .retryWhen(errors => {
        if($code == 429) throw errors;
        else return errors.delay(1000).take(2);
    })
.catch((res)=>this.handleError(res));

我怎样才能获得状态代码retryWhen?

Plunker 上的现场演示 http://plnkr.co/edit/iz9N8LzYIghwqqrstNEN?p=preview

Angular 2 rc.6, RxJS 5 Beta 11, Typescript 2.0.2


您可以将429错误的处理写成errors可观察到的传递给retryWhen。发出的错误errorsobservable 将包含一个status属性(如果它们是从服务器收到的错误)。

如果您不想在发生 429 错误时重试,而是希望抛出错误,您可以执行以下操作:

return this.http.get(url,options)
    .retryWhen((errors) => {
        return errors
            .mergeMap((error) => (error.status === 429) ? Observable.throw(error) : Observable.of(error))
            .delay(1000)
            .take(2);
    })
    .catch((res) => this.handleError(res));

相反,如果您希望 HTTP observable 完成而不发出错误或响应,则可以简单地过滤 429 错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 RxJS Observable:重试,429 状态除外 的相关文章

  • 如何在Angular2中正确使用依赖注入(DI)?

    我一直在试图弄清楚 DI 依赖注入在 Angular2 中是如何工作的 每次当我尝试将服务 或类注入我的组件时 我都会遇到很多问题 从不同的谷歌搜索文章中 我需要使用providers 在组件配置中 或者有时我需要使用 Inject 在我的
  • 添加 PayPal 付款方式 Ionic

    我正在尝试在我的用 Ionic 2 3 制作的应用程序上实现 PayPal 付款方式 我已经安装了 ionic cordova plugin add com paypal cordova mobilesdk npm install save
  • 如何使用 Angular 2 修改 ng-bootstrap 轮播的 CSS

    最近 我尝试修改 ng bootstrap carousel 组件中的 carousel item 类 但是 我发现我需要在元数据中添加 encapsulation ViewEncapsulation None 使用此解决方案还会更改其他轮
  • 如何将 Laravel 5.4 与 Angular 4 集成

    我知道如何创造完整的拉拉维尔 5 4自己的项目 我也知道如何使用创建 SPA角4 Problem 我不知道如何将 Laravel 与 Angular 集成 另外 我想使用 Laravel 5 4 作为后端 使用 Angular 4 作为前端
  • 警告:找不到父级 tsconfig.json

    我想修复警告 警告 找不到父级 tsconfig json 在打字稿中Errors tab in IntelliJ IDEA 2016 3 我的 TypeScript 代码位于src目录和我的 TypeScript 输出将是lib正如预期的
  • D3、TS 和 Angular 2

    我正在尝试将 D3 v4 与 Angular 2 Typescript 一起使用 我目前正在研究 D3 v4 我能够遵循 stackoverflow 中类似问题的一些答案 但没有成功 我已经导入了大部分 D3 库及其类型 我使用的是 TS
  • 如何在父视图和子视图中使用组件两次(DI 是共享的,comp 是单例)

    我有一个按钮组件 具有应用程序特定行为 我打算在应用程序中广泛使用它 问题是 当我有一个使用此按钮的父 子视图时 单击父按钮会触发子视图按钮的 操作 如果不这样做 您自然不会明白发生了什么有多年的面向对象编程经验 让年轻的学校新手使用 da
  • 在指令中动态添加 *ngIf

    如何动态地将 ngIf 添加到用属性指令修饰的元素 为了一个简单的实验 我尝试了这个 Directive selector lhUserHasRights export class UserHasRightsDirective implem
  • 通过扩展和实现的组合来理解 TS 的类型推断/缩小

    我有以下示例代码 class B implements Error name string message string stack undefined string function Foo x any if x instanceof E
  • 使用属性和泛型类型获取“keyof”中项目的类型

    我想定义一个具有泛型类型的接口 该接口必须接受一个对象 其键作为 根字段名称 值作为对象数组 该数组定义一些子字段 其键作为子字段的名称 type 作为字段值的类型 像这样的东西 interface Inputs emails email
  • webpack TS2304 找不到名称“Map”、“Set”、“Promise”

    我有以下 webpack config js var path require path var webpack require webpack module exports entry ng2 auto complete path joi
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 类型 {} 上不存在 Typescript 属性

    我有以下代码打字稿 为什么编译器会抛出错误 var object Object defineProperty object first value 37 writable false enumerable true configurable
  • Karma 单元测试 / STORE - 状态未定义

    运行应用程序时一切正常 但在帐户单元测试中似乎没有启动或我的状态已启动 我有什么明显做错的事情吗 这是错误 Test error index js 中的创建选择器返回一个带有未定义参数的函数 但仅在 karma 测试期间返回 账户 comp
  • Angular 2 - ng 构建与 webpack 构建

    我想了解构建和部署 Angular 2 Web 应用程序的最佳方法是什么 我最终需要将其作为 Web 捆绑资源提供给我的 dropwizard 应用程序 我试图了解是否应该保留 ng build 并使用它来生成我的 dist 文件夹 或者我
  • 如何声明具有可变数量属性的 TypeScript 接口?

    这是一个简单的问题 令我惊讶的是我在任何地方都找不到明确的答案 我正在制作一个 API 需要定义一个可以具有多个 字符串 属性的接口 但没有设置属性数量 也没有设置它们的名称 但它们都必须具有字符串值 因此以下所有对象都将与该类型匹配 sl
  • 如何获取数组作为 GraphQL 解析器的输入

    我想得到一个字符串数组ids查询变量中的参数并在我的解析器中使用它 下面是我的代码 People resolver ts import Resolver Query Mutation Args from nestjs graphql imp
  • 使用 typescript、karma 和 jasmine 进行 RxJS Observable.timer 单元测试

    大家好 我对 Angular2 Karma 和 Jasmine 还比较陌生 目前我正在使用 Angular 2 RC4 Jasmine 2 4 x 我有一个 Angular 2 服务 它定期调用 http 服务 如下所示 getDataFr
  • 角度 2 通道数组到自定义验证器(模板驱动形式)

    我需要将一个对象数组传递给 a2 自定义验证器 然后我想根据该数组中的记录验证模板驱动表单字段的值 但是我无法检索验证器内的对象 我唯一能看到的是它的名称作为字符串 如有任何帮助 我们将不胜感激
  • Webpack 与 typescript 获取 TypeScript 发出无输出错误

    我从这里得到了这个配置https www npmjs com package ts loader https www npmjs com package ts loader webpack config js var path requir

随机推荐

  • Safari Mobile iframe 存在内部 iframe 大小问题

    我有一个 简单 的 Web 应用程序 有一个导航和一个内容区域 在内容区域内 我有一个包含更复杂内容的 iframe 不幸的是 iframe 中的内容有另一个 iframe 在这里查看概述 在我的场景中 查看完整的 iframe 内容非常有
  • 带负载的 Jsoup HTTP POST

    我正在尝试通过 jsoup 发出此 HTTP 请求here http developer decarta com Docs REST BatchRequests http api decarta com v1 KEY batch reque
  • 如何在房间中制作复合钥匙

    我刚刚在房间里找到了 PrimaryKey 注释 那么如果我想制作复合键那么我该怎么做呢 利用primaryKeys Android 开发者文档 https developer android com reference android a
  • 发送 cmdarray 供 exec 处理——hello world

    我不是发送一系列命令 hello world 到exec https docs oracle com javase 7 docs api java lang Runtime html exec 28java lang String 5B 5
  • 更改数组的值会更改原始数组 JavaScript

    以下代码导致 id 中的两个元素0被设置为 即使我只想将其中一个设置为 1 我只是创建对 labelArray 的引用 还是其他什么 labelArray sort compare valueArray labelArray valueAr
  • HTML 元素的“默认操作”是否有标准资源? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有一个定义的标准来定义各种 HTML 元素的默认操作 我看过W3C 的 HTML 规范 h
  • 宏扩展可以包含(声明...)表达式吗?

    Common Lisp Hyperspec 规定 宏形式不能扩展为声明 声明表达式必须显示为它们引用的形式的实际子表达式 我对 扩展到 的含义感到困惑 由于显而易见的原因 如下宏将不起作用 defmacro optimize fully d
  • 如何将 rustc 标志传递给货物?

    我正在尝试禁用死代码警告 我尝试了以下方法 cargo build A dead code rla git master 货物构建 A dead code 错误 参数无效 所以我想知道如何将 rustc 参数传递给 Cargo 您可以通过几
  • 如何根据两个值对列表进行排序

    我有一个列表 我想根据两个值日期和状态进行排序 如下所示 pollsList sort a b gt b active compareTo a active pollsList sort a b return b actualStartDa
  • AnimationTimer 是否在自己的线程中运行?

    JavaFX 是否有AnimationTimer启动时在单独的线程上运行 我在调试器中运行了一个 JavaFX 应用程序 有或没有AnimationTimer 并且在这两种情况下都有 6 个线程在运行 另外 JavaDocs 没有提到它的实
  • 正则表达式在句点后添加空格,但当句点表示小数或字母缩写时不添加空格?

    以简单的方式使用 php regexp 是否可以修改字符串以在单词后面的句点之后添加空格 但不能在前后有数字 例如 1 00 的句点之后添加空格 我还需要它来忽略单字母缩写 例如 N Y String Looks like this Wit
  • Java非常大的堆大小[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人有在 Java 中使用非常大的堆 12 GB 或更大 的经验吗 GC 是否会使程序无法使用 您使用什么 GC 参数 Sun 或 B
  • plantUML:泳道和重叠连接器

    我正在使用 plantUML 泳道来可视化内部流程 但不幸的是 当我想要显示已执行和分离的流程时遇到重叠线 我正在使用这个 startuml title something dee4e8 p1 c4c9cd p2 daf0fe Backen
  • 如何在空手道中运行单个场景?

    为了测试空手道的特定功能 我运行 mvn test Dkarate options classpath myfeature feature 有没有办法运行定义到功能中的单个场景 是的 您可以通过标签 https github com int
  • 仅获取用户媒体(照片) - Twitter API

    使用 Twitter API V1 1 是否可以检索用户发布的照片 我可以看到 执行此操作的一种方法是拉动用户的时间线include entities true并以这种方式搜索照片 但这似乎是一种极其麻烦的方法 而且容易出现问题 例如 我们
  • 如何在项目中实现预编译头

    我了解预编译头背后的目的和推理 然而 实施时有哪些规则呢 根据我的理解 事情是这样的 将您的项目设置为使用带有 YU 指令的预编译头 创建 stdafx h 文件并将其设置为预编译头 将此作为每个 h 文件中的顶部包含语句 这是正确的吗 您
  • 如何确认邮件已送达或未送达?

    下面是我的代码 大家看一下 System Net Mail MailMessage oMail new System Net Mail MailMessage System Net Mail SmtpClient smtp new Syst
  • 阶乘的最低有效非零数字

    我正在尝试计算阶乘中最低有效的非零数字 我有以下片段 document ready function submit click function var n number val get result n function get resu
  • PHP .htaccess -> 漂亮的 url(相反)

    我知道如何进行 URL 重写 例如 www example com index php id 1 cat 3 to www example com 1 3 管他呢 我知道 我不知道到底如何更改所有页面中的整个链接以链接到漂亮的 URL 我网
  • Angular 2 RxJS Observable:重试,429 状态除外

    我已经编写了 Observable 来自 HTTP 请求 以在失败时重试 不过 我想not如果服务器响应为重试429 Too many requests error 无论如何 当前的实现都会重试两次 间隔 1 秒 return this h