确定 Flow 何时不返回数据

Kotlin 流程声明如下:

挂起函数异步返回单个值,但我们如何返回多个异步计算值?这就是 Kotlin Flows 的用武之地。

但是,如果我的流的来源是这样的,当它完成但没有返回数据时,有没有办法从流中确定?例如,如果流的源调用后端 API,但 API 没有返回数据,有没有办法确定流何时完成并且没有数据?

stack overflow Determining when a Flow returns no data
原文答案
author avatar

接受的答案

您可以在流程上执行 toList() 并检查它是否为空


答案:

作者头像

有一个 onEmpty 方法,如果流程完成但没有发出任何项目,它将调用一个动作。

它还可以用于向流发出一个特殊值,以指示它是空的。例如,如果你有一个事件流,你可以发出一个 EmptyDataEvent

或者你可以在这个 onEmpty lambda 中做任何你想做的事情。

高度相关的也是 onCompletion 方法

作者头像

如果 API 返回 Flow ,则通常期望返回 0 个或更多元素。该流程通常会由一些代码收集,以便处理这些值。 collect() 调用是一个挂起函数,将在流程完成时返回:

val flow = yourApiCallReturningFlow()

flow.collect { element ->
   // process element here
}

// if we're here, the flow has completed

任何其他终端运算符,如 first()toList() 等,将以某种方式处理流程的完成(甚至可能提前取消流程)。

我不确定您在这里寻找什么,但例如有一个终端操作员 count

val flow = yourApiCallReturningFlow()

val hasAnyElement = flow.count() == 0

还有 onEmpty 允许发出一些特定的值而不是空流。

我想这取决于您在流程中有 are 项时想要做什么。