我创建了一个 kotlin 多平台库来设计针对 JVM 和 JS(nodejs 和浏览器)的域层。 Domain 依赖于 UseCase,UseCase 依赖于 Repository,Repository 依赖于 Service 和 Database。 AFAIK,Kotlin Coroutines 跨平台工作(JS/JVM/Native)。
我有一个返回 Flow
的函数, 而不是 Promise
.
fun getUserList() : Flow<List<User>>{...}
原因是,我想在数据库发生任何变化时立即更新 UI。在 JVM(或 Android)上,我知道如何使用 Flow。但是不明白如何从普通的 Javascript(或 TypeScript)(不是 Kotlin-JS)中使用它。甚至我也没有找到任何解释使用 Flow for JS 的支持文章。
谁能帮我解决这个问题?任何帮助将不胜感激!
PS:我的 Javascript 技能是中级的 :P
最佳答案
所以,在我找到解决这个问题的官方方法之前,这就是我想出的:
我没有返回 Flow,而是创建了一个带有两个参数的包装函数:
@JsName("getUsersListWithUpdatesJs")
fun UserUseCase.getUsersListWithUpdatesJs(
success: (List<User>) -> Unit,
error: (Throwable) -> Unit
) = GlobalScope.promise {
try {
getUsersList().collect {
success(it)
}
} catch (exception: Throwable) {
error(exception)
}
}
然后我在我们的 Nexus 服务器上发布了 Js 库。
使用 npm 作为依赖项添加到 JS 项目中。
然后,用法:
import * as domain from "my-multiplatform-library";
…
…
…
domain.com.abc.usecase.createUserUseCaseJs().then(
(useCase) => {
console.log(useCase);
useCase. getUsersListWithUpdatesJs(
(list) => {
// This block should be called twice. For Empty and Non-empty array
console.log("Response", list)
},
(error) => {
// Ignore this block for now
},
);
},
(error) => {
console.log(error);
}
);
关于javascript - kotlin 多平台 : how to use Kotlin Flow in Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61626495/