KotlinJS 1.2.40是否不支持launch协程及其他协程功能?
launch无法识别的问题 这是Kotlin 1.2.x版本实验性协程在JS平台的典型配置问题——这个版本的协程还处于实验阶段,JS端的支持需要特定的依赖、编译参数和导入方式,咱们一步步来解决:
第一步:添加匹配版本的协程JS依赖
Kotlin 1.2.40对应的协程库版本是0.23.4(早期协程版本和Kotlin版本强绑定),你需要在项目的build.gradle(或build.gradle.kts)中添加JS版的协程核心依赖:// Groovy DSL写法 dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:0.23.4" }或者用Kotlin DSL:
// Kotlin DSL写法 dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:0.23.4") }第二步:启用实验性协程编译参数
Kotlin 1.2.x中协程是实验性特性,必须在编译配置中显式启用,否则编译器和IDE都不会识别相关API。在build.gradle中添加:kotlin { js { compilations.all { kotlinOptions { freeCompilerArgs += "-Xcoroutines=enable" } } } }第三步:正确导入并使用
launch函数
这个版本的launch不在后来稳定版的kotlinx.coroutines包下,而是在实验性子包中,你需要这样导入:import kotlinx.coroutines.experimental.launch同时,使用时需要指定JS平台的调度器(比如默认调度器):
fun main() { launch(kotlinx.coroutines.experimental.DefaultDispatcher) { // 你的协程逻辑代码 } }第四步:清理IDE缓存
IntelliJ IDEA有时候会因为缓存问题无法及时识别新添加的依赖或编译参数,你可以通过File -> Invalidate Caches / Restart选项重启IDE,刷新缓存后应该就能正常识别launch等协程API了。
另外要注意,Kotlin 1.2.x的协程API和后来的稳定版(1.3+)差异很大,如果后续项目升级到Kotlin 1.3及以上,协程会变为稳定特性,配置和API都会更简洁,但当前基于1.2.40的话,以上步骤应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Christoph Berghuber

