首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有节点模的Kotlin协同线

具有节点模的Kotlin协同线
EN

Stack Overflow用户
提问于 2018-12-09 05:09:55
回答 1查看 252关注 0票数 4

我在问自己,如何将Kotlin的协同器与一些节点模块一起使用。我试图用Kotlin编写一个node.js服务器。

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

Kotlin文档对我没有帮助,JetBrains说我只需要编写我的方法就像它同步工作一样,并且使用其他Kotlin函数就像它们同步运行一样,但是用本机JavaScript编写的函数不知道像“挂起”这样的关键字,或者我应该忽略这个事实吗?

一个例子是以下功能:

代码语言: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来编写这个函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 15:00:38

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

代码语言:javascript
复制
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类型的语义,所以我不知道这是否有效。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53689583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档