我正在使用密码管理器webapp,它使用Parvez Anandam的pbkdf2.js进行密钥生成(即将文本密码转换为适合AES的256位密钥)。我正在使用该项目来学习coffeescript。我无法从回调中获取数据。这是我的代码:
keygen = (password, salt, iterations) ->
key = 1
pbkdf = new PBKDF2 password, salt, iterations, size_in_bytes
pbkdf.deriveKey ((p) ->), ((k) ->
key = k
console.log "within callback " + key
)
console.log "straight line path " + key
由于deriveKey立即返回,我没有数据 - 最后一行打印“1”。处理这个问题的正确方法是什么?在java中我希望得到一个类似Future的对象,我可以加入或等待,但我意识到我的后端习惯可能不适合UI代码。我应该从回调中调用“继续”功能进行加密并提交表单吗?
答案 0 :(得分:3)
通常的方法是发送一个异步任务在完成后可以调用的回调函数。像这样:
keygen = (password, salt, iterations, finished) ->
key = 1
pbkdf = new PBKDF2 password, salt, iterations, size_in_bytes
pbkdf.deriveKey ((p) ->), ((k) ->
key = k
console.log "within callback " + key
finished key
)
console.log "straight line path " + key
因此,当您致电finished
时,您将提供keygen
功能,finished
会在key
可用时执行任何需要执行的操作。你的finished
通常是匿名关闭。
如果你看一下任何一个AJAX库(比如jQuery),你会看到很多这样的事情:你将函数传递给函数,函数一直向下。