洞察探索如何利用兼容微信生态的小程序容器,实现跨平台开发,助力金融和车联网行业的数字化转型。
581
2022-10-24
Future基于Kotlin协同程序的简单的monadic未来实现
A simple monadic future implementation based on coroutines for Kotlin
Usage
It's a simple type that help us to manage the asynchrony and the concurrency. With this library you can write async code in sync way.
For launch an async process it's as simple as this:
Future { doHeavyTask() }
If it's necessary to obtain a result and process it this is the way:
val myResultFuture = Future { getResultFromMyServer() }myResultFuture.map { processMyResult(it) }
If there is concurrency and we need to process more than one result together we should use flatMap and map:
val myResultFuture = Future { getResultFromMyServer() }val myOtherResultFuture = Future { getOtherResultFromMyServer() } val myDataProcessedFuture = myResultFuture.flatMap { myResult -> myOtherResult.map { myOtherResult -> processTogether(myResult, myOtherResult) }}
And if you need apply effects in the UI the method for this is onComplete:
myDataProcessedFuture.onComplete { renderResult(it) }
If use map and flatMap together is weird or ugly for you, you can implement methods like this for avoid boilerplate. Maybe in next versions this library could include a solution for this.
fun
Here a complete example:
fun initLoadData() { val myResultFuture = Future { getResultFromMyServer() } val myOtherResultFuture = Future { getOtherResultFromMyServer() } val result = forComprehension(myResultFuture, myOtherResult) { myResult, myOtherResult -> processTogether(myResult, myOtherResult) } result.onComplete { renderResult(it) }}
Distribution
Add as a dependency to your build.gradle
repositories { ... maven { url 'https://jitpack.io' } maven { url "https://kotlin.bintray.com/kotlinx/" }} dependencies { compile 'com.github.JMPergar:FutureK:v0.12'}
License
Copyright 2017 José Manuel Pereira GarcíaLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at http://apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~