android - 使用 LiveData 的 emit 和 emitSource 有什么区别?(如实时用例)
问题描述
emit
接受data
类而emitSource
接受LiveData<T>
( T -> data
)。考虑以下示例:-我有两种类型的调用:-
suspend fun getData(): Data // returns directly data
另一个;
suspend fun getData(): LiveData<Data> // returns live data instead
对于第一种情况,我可以使用:-
liveData {
emit(LOADING)
emit(getData())
}
我的问题:使用上述方法可以解决我的问题,为什么我们仍然需要emitSource(liveData)
?
使用该方法的任何好的用例
emitSource
都会清楚地说明!
解决方案
正如您所提到的,我认为它不能解决您所说的问题中的任何问题,但我通常这样使用它:
如果我想在从远程获取新数据的同时从数据库向用户显示缓存数据,只发出它看起来像这样:
liveData{
emit(db.getData())
val latest = webService.getLatestData()
db.insert(latest)
emit(db.getData())
}
但是使用 emitSource 它看起来像这样:
liveData{
emitSource(db.getData())
val latest = webService.getLatestData()
db.insert(latest)
}
由于 liveData 已经有源,因此不需要再次调用 emit。
推荐阅读
- java - 在 map 中查找子字符串,不区分大小写
- javascript - 有没有一种标准的方法可以向 Vue 添加演示信息?
- r - 如何将列表存储为小标题中的函数输出?
- c++ - 在 Arduino 上通过 MQTT 将 uint8_t 发布为 char
- java - Elasticsearch 中 49 条记录后出现异常
- angularjs - 如何将 AngularJS 代码写入 Angular 9?
- spring - Spring Boot Rest 模板保持连接活跃
- unix - 如何在 shell 脚本中使用不同类型的分隔符提取文件名的子字符串?
- c++ - 在向量 C++ 中排列奇数和偶数
- java - Java SSL - 添加到 CACERTS 的证书在重新启动后不起作用