确定流何时不返回数据



Kotlin流程说明如下:

挂起函数异步返回单个值,但是如何返回呢我们可以返回多个异步计算的值吗?这就是Kotlin flow来了

然而,如果我的流的来源是这样的,当它完成,但没有返回数据,是否有一种方法来确定从流?例如,如果流的源调用后端API,但是API没有返回任何数据,那么是否有一种方法可以确定流何时完成并且没有数据?

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

val flow = yourApiCallReturningFlow()
flow.collect { element ->
// process element here
}
// if we're here, the flow has completed

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

我不确定你在这里找什么,但例如有一个终端操作员计数:

val flow = yourApiCallReturningFlow()
val hasAnyElement = flow.count() == 0

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

我想这取决于当流中有项时你想做什么。

有一个onEmpty方法会调用一个操作流程完成不发射任何物品。

还可用于向流发出一个特殊值,表明它为空。例如,如果你有一个事件流,你可以发出一个EmptyDataEvent.

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

高度相关的还有onCompletion方法

我求助于

flow.take(1).count() == 0

这将只等待流发出一个元素的时间,或者不发出任何元素而结束。

结果计数将是01。如果是0,则Flow为空。如果为1,则该流至少包含一个元素,因此非空。

你可以在flow上执行toList()检查它是否为空

最新更新