1. 程式人生 > >關於RxSwift MVVM flatMapLatest 點選事件網路請求失敗整個序列結束

關於RxSwift MVVM flatMapLatest 點選事件網路請求失敗整個序列結束

例子
先上程式碼吧:


self.signedIn = input.loginTaps.withLatestFrom(usernameAndPassword)
            .flatMapLatest { (username, password) in
return EmeAPI.sharedInstance.request(UserApi.login(loginName: username, password: password))
                    .observeOn(MainScheduler.instance)
                    .mapRegMessageObj
(User) }.shareReplay(1)/*這樣就不會出現『多次訂閱導致重複地網路請求』的情況了。*/ 解釋下: 我的邏輯是 登陸功能, 先判斷textfield 錄入的是否合法,然後 在發起網路請求 EmeAPI.sharedInstance.request是我封裝的網路請求 mapRegMessageObj(User) 這句話是解析例項化為user model self.signedIn 是用於在controller 中使用的,我想實現是 如果成功就可以直接使用user物件,否則會走catcherror 中,然後可以統一處理錯誤邏輯了 現在存在問題: 如果在 flatMapLatest 中的網路請求發生錯誤error,然後 按鈕就不能點選了, 現在主要就是這塊的問題,我估計是flatMapLatest 如果發生錯誤它就會主動傳送complete 然後 在點選按鈕 就不會再進行網路請求了,現在求大神幫忙解析下吧

swift3.0 之前

extension ObservableType {
    func flatMapLatest<O: ObservableConvertibleType>(selector: (Self.E) throws -> O,onError: (ErrorType throws -> Void)) -> RxSwift.Observable<O.E> {

        return flatMapLatest({ x in

            try selector(x).asObservable().catchError { error in
try onError(error) return Observable.never() } } ) } }

swift3.0之後

extension ObservableType {

    public func flatMapLatest<O: ObservableConvertibleType>(selector: @escaping  (Self.E) throws -> O,onError: (@escaping (Swift.Error) throws ->())) -> RxSwift.Observable<O.E> {

        return flatMapLatest({ x in
           try selector(x).asObservable().catchError({ error in

               try onError(error)

                return Observable.never()
            })
        })

    }

}

相關推薦

關於RxSwift MVVM flatMapLatest 事件網路請求失敗整個序列結束

例子 先上程式碼吧: self.signedIn = input.loginTaps.withLatestFrom(usernameAndPassword) .flat

網路請求失敗按鈕不響應事件

今天遇到兩個問題,請求時,怎麼也連不上伺服器,查了好久,結果是手機的wifi沒有開,自己坑了自己半天。還有一個問題是按鈕點選怎麼都沒反應,最後發現是按鈕的superView的範圍太小,按鈕在其外面,點選就沒效果了。還有

Unity 多Canvas 事件的響應

問題 :Canvas在World Space模式下無法接受點選事件 解決辦法: 1.Canvas的EventCamera如果為空,則設定對應Canvas的Camera的Tag為MainCamera 2.指定Canvas的EventCamera為對應的Camera   其

Unity UGUI按鈕動態新增事件

使用程式碼的方式給按鈕新增點選事件需要引入兩個名稱空間: using UnityEngine.UI; using UnityEngine.Events; 先建立一個介面,並且在介面裡放置一個按鈕: 建立一個Test指令碼,程式碼如下: using

安卓自定義:Toast 以及Toast的出場動畫 以及Toast上新增圖片 以及事件

安卓自定義Toast: 1.自定義一個類:CustomToast 繼承自:Toast 2.在CustomToast類中 新增一個靜態 mCustomToast 物件 private static CustomToast mCustomToast; 3.在CustomToast類中 新

openDialog()中確定按鈕事件

openDialog()中確定按鈕點選事件 本文是我在開發過程中,遇到的也是我不知道的知識,所以此篇僅當做自己以後借鑑用的,如果能對看官你也有用,榮幸之至。 form.ajaxSubmit 首先,在jeeplus中xxxform.jsp檔案中,一般openDialog()

Android listview子控制元件的的事件(轉)

1.先看圖,是否是你想要的   2.佈局檔案<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

better-scroll 與fastclick事件相沖突

better-scroll 點選事件與fastclick點選事件相沖突導致圖片點選無反應 import BScroll from 'better-scroll'   export default {     props: {   

事件分發機制 關鍵原始碼筆記

請注意,涉及到的原始碼 SDK 版本為 27,不同版本可能存在偏差,一切以具體的原始碼為準。 宣告: 文字部分主要參考自 《Android 開發藝術探索》,原始碼部分的解讀主要摘抄自 Android 觸控事件機制(三) View中觸控事件詳解 、 Android 觸控事件機制(四)

element-ui 下拉el-dropdown-item新增事件@click無效怎麼回事

<el-dropdown trigger="click" v-if="hasPower('120303')||hasPower('120304')">              &

在Activity中引用控制元件以及控制元件的事件

今天我們要講的是在Activity中使用控制元件,我們在AndroidStudio中建立好了專案,會有一個Mainactivity,對了這裡推薦大家在使用AndroidStudio寫程式碼的時候,選擇project如下圖: 選擇這種結構呢,大家可以很清楚的看到專案目錄結構 良好的

jquery定義之後的按鈕事件,會產生累計的情況

使用jquery的on()方法為元素綁定了點選事件,點選同時傳送請求。完成後看效果,第一次點選沒有問題。再一次點選後發現傳送了兩次請求,後面再點擊發現請求的數量越來越多。當排查之後,發現只有一個元素綁定了事件,而且只調用了一次之後,得出最有可能的一種情況,就是點選事件被累加綁定了。 $("#ad

Android 雙擊事件 1秒內禁止 事件 收集

1.類似於 很多App 雙擊退出App // 再點一次退出程式時間設定 private static final long WAIT_TIME = 2000L; private long TOUCH_TIME = 0; @Override public

可能是最詳細的Android事件處理詳解(三)

前兩篇文章: 可能是最詳細的Android點選事件處理詳解 可能是最詳細的Android點選事件處理詳解(二) 這裡再次延伸一下,在ScrollView和RecyclerView巢狀中touch事件的傳遞過程,以及巢狀滑動衝突的問題。 如上圖,外層是一個Neste

可能是最詳細的Android事件處理詳解(二)

上一篇我們主要詳細描述了touch事件在各層的傳遞 本篇文章主要是對比touch在不可滾動和可滾動的ViewGroup事件的傳遞過程 如上圖: - 左圖:是ViewGroup巢狀View,不可滑動 - 右圖:也是ViewGroup(RecyclerView)巢

可能是最詳細的Android事件處理詳解

面試的時候,很多時候都會問到Touch事件的傳遞,而且問法角度都有所不同,但是還是會遵循基本的事件傳遞規則的,可能他問的你沒處理過,但是根據基本規則慢慢思考來回答,都不會錯。 一,簡介 首先我們知道touch事件 主要是是在三個方法中傳遞和處理的。分別是:

UIView新增手勢 然後UITableView 新增進這個View 導致UITableView 的單元格事件無效

#pragma -mark UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)tou

iOS runtime防止button連續事件

在我們平時iOS開發過程中經常使用按鈕,按鈕的點選事件使用場景眾多。但是我們很少注意到當你快速連續點選同一個按鈕的時候,會產生多次響應。 一般的處理方法: 在點選按鈕事件裡面,把button.enabled = NO,執行結束再設定為YES。這樣也能實現,但是每次都得設定,比較繁瑣。

unidbgrid列事件與check多框衝突

procedure TMainForm.UniDBTreeGrid2AjaxEvent(Sender: TComponent;   EventName: string; Params: TUniStrings); begin   UniServerModule.logger.Ad

React Echarts 事件

在React中用Echarts畫了一個環形圖,如下。 現在想要實現一個點選事件 然後查詢了一下Echarts的官方文件。http://www.echartsjs.com/api.html#events 是這樣的, 然後我是這樣做的:   onclick = {