摘要:題外話服務可用性是指,服務提供者需要保證服務在任何時間情況下正確地提供。然后服務提供者,會將驗證碼發送到用戶手機。
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終端進行提取現金等操作后,數據都會被及時同步和備份。當不可抗因素發生時,數據可以被盡快的通過備份恢復。通常這些解決方案被稱為災備處理。
使用云服務,例如Ucloud的Redis服務,可以在同一個服務上看到兩個不同地址訪問地址,文檔描述如下:
每個云內存存儲實例都會提供兩個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") })
這樣,用戶能夠收到驗證碼并成功驗證的幾率大大增加。
劇終
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78502.html
摘要:選擇后,僅有聯通的可觀察對象會被觀察到。從外部看,所有訂閱者僅能觀測到這個聯通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗證一下當一個流被聯通后,其他的流腫么辦先記住結論未被選擇的流將被調用方法,也就是說,他們被終止了。 起因 在SegmentFault里發布過一篇RxJS的簡明教程,很多人反饋對這個主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:任何程序設計語言在講解遞歸特性時,基本都會舉漢諾塔斐波拉契數列的例子。沒錯,請你對比一下斐波拉契數列和定義的相似之處遞歸完成后產生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數總是將指定的可觀察對象序列中最新發...
摘要:當無法匹配時,該對象被默認返回。如果沒有明確指定,將返回附加了指定的對象。返回值返回值為經過選擇后的可觀察對象。題外話鍵值對,可以對值進行命名。鍵值對是對象的組成部分,鍵名可以方便進行查找和比較操作。 Rx* (Observable.case)方法 方法定義 [Rx.Observable.case(selector, sources, [elseSource|scheduler])] ...
摘要:接下來,我們將實現一個真實的應用程序,顯示幾乎實時發生的地震。得到的由表示,其中包含和的合并元素。如果不同同時傳出元素,合并序列中這些元素的順序是隨機的。是操作序列的強大操作符。但是的方法仍在運行,表明取消并不會取消關聯的。 Rxjs 響應式編程-第一章:響應式Rxjs 響應式編程-第二章:序列的深入研究Rxjs 響應式編程-第三章: 構建并發程序Rxjs 響應式編程-第四章 構建完整...
摘要:插件開發前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內優雅的實現文件分片斷點續傳。 Vue.js 插件開發 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....
閱讀 3592·2021-11-24 10:19
閱讀 3730·2021-09-30 09:47
閱讀 1295·2019-08-30 15:56
閱讀 792·2019-08-29 15:11
閱讀 905·2019-08-29 13:43
閱讀 3571·2019-08-28 18:25
閱讀 2162·2019-08-26 13:27
閱讀 1440·2019-08-26 11:44