我在问自己,如何将Kotlin的协同器与一些节点模块一起使用。我试图用Kotlin编写一个node.js服务器。
继续使用JavaScripts著名的回调或承诺很简单,但看起来Kotlin回调是更好的选择。然而,对于node.js服务器,我需要使用MySQL或bcrypt库,只处理回调或承诺,而不使用协同,因为它们分别不是用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)
})
}我如何使用协同和这个libary来编写这个函数?
发布于 2018-12-09 15:00:38
这就是文档希望您编写的内容:
suspend fun comparePass(hash: String, pass: String): Boolean =
suspendCancellableCoroutine { continuation ->
bcrypt.compare(pass, hash) { err: dynamic, res: dynamic ->
continuation.resume(err == null)
}
}请注意,您自己的回调现在被Continuation所取代,这是允许coroutine恢复的内部回调。还请注意,comparePass函数的返回值现在只是Boolean,您可以像调用常规函数一样调用它,不传递自己的回调。
我没有使用Kotlin的第一手经验,我不知道dynamic类型的语义,所以我不知道这是否有效。
https://stackoverflow.com/questions/53689583
复制相似问题