【问题标题】:Suspension functions can be called only within coroutine body error只能在协程体错误内调用挂起函数
【发布时间】:2020-11-18 10:59:41
【问题描述】:

所以,我对 kotlin 中的协程相当陌生,我不明白这里发生了什么。我确实有一个从另一个调用的挂起函数。

这里的正确语法是什么?

suspend fun doSomething(str: Optional<String>) {
  // Error: Suspension functions can be called only within coroutine body
  str.map { doSomethingElse() } 
}

suspend fun doSomethingElse() { }

这很好

suspend fun doSomething(str: Optional<String>) {
  if (str.isPresent) {
    doSomethingElse()
  }
}

suspend fun doSomethingElse() {}

【问题讨论】:

标签: kotlin kotlin-coroutines


【解决方案1】:

Optional.map() 不是内联函数。传递的 lambda 是一个接口,因此如果您尝试从该接口调用挂起函数,则不再是从协程调用它。

在这种情况下,您可以使用.orElse(null)Optional&lt;String&gt; 转换为可为空的String?,然后在结果为非空时调用该函数。 Optional 是 Java 的空安全解决方案,因为 Java 在语法/编译器级别不支持它。你不需要在 Kotlin 代码中使用它,除非它是从 Java 代码传递给你的。

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2020-11-07
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多