gpt4 book ai didi

javascript - 带有 Node 模块的 Kotlin 协程

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:30 27 4
gpt4 key购买 nike

我在问自己如何将 Kotlin 的协程与一些 Node 模块一起使用。我正在尝试用 Kotlin 编写一个 node.js 服务器。

继续使用 JavaScript 著名的回调或 Promises 会很简单,但看起来 Kotlin 回调会是更好的选择。但是,对于 node.js 服务器,我需要使用 MySQL 或 bcrypt 库,它们只能处理回调或 Promises 而不是协程,因为它们不是分别用 Kotlin 编写的。

Kotlin 文档对我没有帮助,JetBrains 说我只需要像同步工作一样编写我的方法并像同步运行一样使用其他 Kotlin 函数,但是用原生 JavaScript 编写的函数不知道关键字“暂停”,还是我应该忽略这个事实?

一个例子是下面的函数:

val bcrypt = require("bcrypt") // require by node.js
fun comparePass(hash: String, pass: String, callback: (Boolean) -> Unit) {
bcrypt.compare(pass, hash, { err: dynamic, res: dynamic ->
callback(err == null)
})
}

我如何使用协程和这个库来编写这个函数?

最佳答案

这是文档希望您编写的内容:

suspend fun comparePass(hash: String, pass: String): Boolean =
suspendCancellableCoroutine { continuation ->
bcrypt.compare(pass, hash) { err: dynamic, res: dynamic ->
continuation.resume(err == null)
}
}

请注意,您自己的回调现在已替换为 Continuation,这是允许协程恢复的内部回调。另请注意,您的 comparePass 函数的返回值现在只是 Boolean,您可以像调用常规函数一样调用它,不传递您自己的回调。

我没有 Kotlin-JS 的第一手经验,我不知道那种 dynamic 类型的语义,所以我不知道这是否行得通。

关于javascript - 带有 Node 模块的 Kotlin 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53689583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com