javascript - kotlin 多平台 : how to use Kotlin Flow in Javascript

标签 javascript java android kotlin kotlin-multiplatform

我创建了一个 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/

相关文章:

javascript - 检测位置并隐藏元素

javascript - htmx: onLoad: "on full page load"和 "on after swap"

javascript - 绘制对象后,有没有办法在 Fabric js 中向该对象添加文本

javascript - 未捕获的语法错误 : Unexpected token & in javascript django app

java - Activity 崩溃(文件处理和相机)

java - 安卓颜色选择器

java - 有什么理由更喜欢 System.arraycopy() 而不是 clone()?

Javadoc 创建 'Specified by' 标题

java - 为什么在 JAVA 中按位 AND with byte 这样做?

android - 在android中的服务中访问viewModel