Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. abstract class UseCase<in P, R>(private val ioDispatcher: CoroutineDispatcher) {
  2. suspend operator fun invoke(parameters: P): Result<R> {
  3. return withContext(ioDispatcher) {
  4. return@withContext executeNow(parameters)
  5. }
  6. }
  7. /**
  8. * 同步執行程式,回傳 [Result]
  9. */
  10. suspend fun executeNow(parameters: P): Result<R> {
  11. return try {
  12. execute(parameters)
  13. } catch (e: Exception) {
  14. Result.Error(e)
  15. }
  16. }
  17. /**
  18. * override 此方法並把邏輯寫在這裡
  19. */
  20. @Throws(RuntimeException::class)
  21. protected abstract suspend fun execute(parameters: P): Result<R>
  22. }
  23. suspend operator fun <R> UseCase<Unit, R>.invoke(): Result<R> = this(Unit)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement