launchFlow

fun <T> launchFlow(request: suspend () -> T, onSuccess: (T) -> Unit, onError: (NetworkException) -> Unit = { performShowMessage(it) }, showLoading: Boolean = true, retry: Boolean = false, repeatSameJob: Boolean = false)

launchflow实际在这里执行.

showLoading:是否显示loading(比如LoadingDialog),默认true retry: 接口返回错误后是否重试,默认false repeatSameJob: 是否重复请求相同签名request.javaClass.name的接口,默认false onError: 默认显示toast. 注意重载: object: ErrorObserver {} 是方便重写的,可保留原错误提示并增加更多内容 ((NetworkException) -> Unit)? 是方便覆盖的,如果不为空,覆盖默认错误显示逻辑

onCompletion比invokeOnCompletion先调用 JobCancellationException走onCompletion(),不走catch() request.javaClass.name:请求签名,类似com.ayvytr.coroutines.main.MainViewModel$getAndroidPostFlow$1

注意: 如果实现了onError,就不会调用IView.showMessage retry的逻辑不能放到flowOn之后collect之前,不然不生效 launchFlow的两个flowOn中间的代码不能抽取方法和zipFlow公用,不然catch不到异常