资讯专栏INFORMATION COLUMN

RxJS API解析(三)

banana_pi / 2274人阅读

摘要:题外话服务可用性是指,服务提供者需要保证服务在任何时间情况下正确地提供。然后服务提供者,会将验证码发送到用户手机。

Rx* (Observable.catch)方法 方法定义

Rx.Observable.catch(...args)

作用

序列中可观察对象因为异常而被终止后,继续订阅序列中的其他可观察对象。

参数

args (Array | arguments): 可观察对象序列。

返回值

(Observable): 可观察对象序列中能够正确终止,不抛出异常的第一个可观察对象。

宝珠图

实例
var obs1 = Rx.Observable.throw(new Error("error"));
var obs2 = Rx.Observable.return(42);

var source = Rx.Observable.catch(obs1, obs2);

var subscription = source.subscribe(
  x => console.log(`onNext: ${x}`),
  e => console.log(`onError: ${e}`),
  () => console.log("onCompleted"));

// onNext: 42

在订阅时, obs1抛出错误后,程序继续执行,转而输出没有异常的obs2,并输出obs2发射的值42。点击进入在线演示。

题外话

服务可用性是指,服务提供者需要保证服务在任何时间、情况下正确地提供。比如联网的银行系统,用户在各个ATM终端进行提取现金等操作后,数据都会被及时同步和备份。当不可抗因素发生时,数据可以被尽快的通过备份恢复。通常这些解决方案被称为灾备处理

使用云服务,例如UcloudRedis服务,可以在同一个服务上看到两个不同地址访问地址,文档描述如下:

每个云内存存储实例都会提供两个IP进行访问。

这两个IP都可以对云内存存储实例进行访问,分布在不同的接入服务上,其作用在于,当其中一个IP无法正常访问时,仍有另一个IP可用,不会完全中止服务。

因此,应用程序可以增加一个容灾切换的逻辑处理:将访问的IP列表设置好,默认访问其中的一个IP,当该IP无法访问时,自动切换到另一个IP继续业务。

文档中提到了增强服务可用性的线索:总是提供一组相同的服务而不是一个服务,或者至少是相似的服务,服务调用后可以完成相同的业务逻辑。
这个策略也是负载均衡的基础,可以缓解单个服务提供者的压力,从用户角度看,又感知不到服务的差异性:比如 多个HTTP服务 、_读写分离的数据库_。

文末,举一个实例:假设你需要做一个APP,APP中用户在通过手机验证码验证后,才能登录账户。

许多第三方服务提供商,都提供手机验证服务,比如_LeanCloud_,调用者像服务提供方发送POST请求,请求的body为用户手机号码。然后服务提供者,会将验证码发送到用户手机。用户在收到验证码后,通过表单,输入验证码,提交后,调用者再次向服务提供商发起POST请求,请求的body为用户输入的验证码然后等待服务提供商响应。

当然,某些情况下,服务提供商可能自己挂了,或者是不支持向某个号码所属的运营商提供服务;还有些情况下,用户的号码可能在某个服务提供商的黑名单中。比如:你的一个用户是 经常写竞品分析的产品经理 ,可能也许大概你的号码就在某个服务提供商的黑名单中。

我们往往要同时接入多个服务提供商的短信验证服务,保证用户能够正常通过我们的注册(登录)流程:

回到catch()函数,结合定义我们可以把一个提供商作为主要服务提供者,如果其不能提供服务(调用失败),我们可以选择第二家作为候选:

var service1 = Observable.create("服务提供商#1");
var service2 = Observable.create("服务提供商#1");

Observable.catch(service1, service2).subscribe({
    ()=>console.log("succeed"),
    ()=>console.log("所有验证服务均不可用")
    ()=>console.log("completed")
})

这样,用户能够收到验证码并成功验证的几率大大增加。

剧终

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78502.html

相关文章

  • RxJS API解析(一)

    摘要:选择后,仅有联通的可观察对象会被观察到。从外部看,所有订阅者仅能观测到这个联通了支流。,其中表示输入流,是操作符,是最后的输出流。截图验证一下当一个流被联通后,其他的流肿么办先记住结论未被选择的流将被调用方法,也就是说,他们被终止了。 起因 在SegmentFault里发布过一篇RxJS的简明教程,很多人反馈对这个主题很是很感兴趣,详见RxJS简明教程。 Rx 是一种编程的思维,而不是...

    姘搁『 评论0 收藏0
  • RxJS API解析(四)

    摘要:任何程序设计语言在讲解递归特性时,基本都会举汉诺塔斐波拉契数列的例子。没错,请你对比一下斐波拉契数列和定义的相似之处递归完成后产生值的过程就是的过程。 Rx*(Observable.combineLatest)方法 方法定义 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通过处理函数总是将指定的可观察对象序列中最新发...

    cheng10 评论0 收藏0
  • RxJS API解析(二)

    摘要:当无法匹配时,该对象被默认返回。如果没有明确指定,将返回附加了指定的对象。返回值返回值为经过选择后的可观察对象。题外话键值对,可以对值进行命名。键值对是对象的组成部分,键名可以方便进行查找和比较操作。 Rx* (Observable.case)方法 方法定义 [Rx.Observable.case(selector, sources, [elseSource|scheduler])] ...

    chanthuang 评论0 收藏0
  • Rxjs 响应式编程-第二章:序列的深入研究

    摘要:接下来,我们将实现一个真实的应用程序,显示几乎实时发生的地震。得到的由表示,其中包含和的合并元素。如果不同同时传出元素,合并序列中这些元素的顺序是随机的。是操作序列的强大操作符。但是的方法仍在运行,表明取消并不会取消关联的。 Rxjs 响应式编程-第一章:响应式Rxjs 响应式编程-第二章:序列的深入研究Rxjs 响应式编程-第三章: 构建并发程序Rxjs 响应式编程-第四章 构建完整...

    姘搁『 评论0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件开发前端掘金作者原文地址译者插件是为应用添加全局功能的一种强大而且简单的方式。提供了与使用掌控异步前端掘金教你使用在行代码内优雅的实现文件分片断点续传。 Vue.js 插件开发 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins译者:jeneser Vue.js插件是为应用添加全局功能的一种强大而且简单的方式。插....

    izhuhaodev 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<