關於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 = {