Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在coffeescript(或javascript)中等待回调?_Javascript_Asynchronous_Callback_Coffeescript_Pbkdf2 - Fatal编程技术网

如何在coffeescript(或javascript)中等待回调?

如何在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)

我正在开发一个密码管理器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) ->), ((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),您都会看到很多这类事情:您将函数传递给函数,函数一直传递下去