概要
非同期処理を読みやすくしたい自分メモです。
定義側
class Thread<Type_> {
fun run(Background_: ((Type_?) -> Any) -> Any, Main_: (Type_?, Throwable?) -> Unit) {
var result: Type_? = null
var err: Throwable? = null
Observable
.create<Type_> { subscriber_ ->
Background_ { value_ ->
subscriber_.onNext(value_)
subscriber_.onCompleted()
}
}
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result_ ->
result = result_
}, { err_: Throwable ->
err = err_
}, {
Main_(result, err)
})
}
}
呼び出し側
Thread<String>().run(
Background_ = { Callback_ ->
val result = "" // 重い処理
Callback_(result)
},
Main_ = { result_, error_ ->
when (error_) {
null -> {
hoge(result_) // 結果受け取り
}
else -> {
// エラー処理
}
}
}
)