如何在coffeescript(或javascript)中等待回调?
我正在开发一个密码管理器webapp,它使用Parvez Anandam的pbkdf2.js生成密钥(即,将文本密码转换为适合AES的256位密钥)。我正在利用这个项目学习咖啡脚本。我很难从回调中获取数据。这是我的密码:如何在coffeescript(或javascript)中等待回调?,javascript,asynchronous,callback,coffeescript,pbkdf2,Javascript,Asynchronous,Callback,Coffeescript,Pbkdf2,我正在开发一个密码管理器webapp,它使用Parvez Anandam的pbkdf2.js生成密钥(即,将文本密码转换为适合AES的256位密钥)。我正在利用这个项目学习咖啡脚本。我很难从回调中获取数据。这是我的密码: keygen = (password, salt, iterations) -> key = 1 pbkdf = new PBKDF2 password, salt, iterations, size_in_bytes pbkdf.deriveKey ((p)
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中,我希望得到一个类似未来的对象,我可以加入或等待它,但我意识到我的后端习惯可能不适合UI代码。我是否应该从回调中调用“continue”函数以继续加密并提交表单?通常的方法是发送一个回调函数,异步任务完成后可以调用该函数。大概是这样的:
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
因此,当您调用keygen
时,您将提供finished
函数,并且finished
将在键可用时执行任何需要执行的操作。您的完成
通常是匿名关闭
如果您查看任何AJAX库(比如jQuery),您都会看到很多这类事情:您将函数传递给函数,函数一直传递下去