RxJS API剖析(三)

Rx* (Observable.catch)要领

要领定义

Rx.Observable.catch(...args)

作用

序列中可视察对象由于非常而被停止后,继承定阅序列中的其他可视察对象。

参数

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

返回值

(Observable): 可视察对象序列中能够准确停止,不抛出非常的第一个可视察对象。

宝珠图

《RxJS API剖析(三)》

实例

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中用户在经由过程手机考证码考证后,才登录账户。

《RxJS API剖析(三)》

很多第三方效劳供应商,都供应手机考证效劳,比方_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')
})

如许,用户能够收到考证码并胜利考证的概率大大增添。

剧终

    原文作者:mumuzhenzhen
    原文地址: https://segmentfault.com/a/1190000004322157
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞