【问题标题】:How do I wait for a callback in coffeescript (or javascript)?如何等待咖啡脚本(或 javascript)中的回调?
【发布时间】:2011-11-27 10:47:50
【问题描述】:

我正在开发一个密码管理器 web 应用程序,它使用 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

由于derivedKey 立即返回,我没有数据——最后一行打印“1”。处理这个问题的正确方法是什么?在 java 中,我希望得到一个类似 Future 的对象,我可以加入或等待,但我意识到我的后端习惯可能不适合 UI 代码。我是否应该从回调中调用“继续”函数以继续加密并提交表单?

【问题讨论】:

    标签: javascript asynchronous callback coffeescript pbkdf2


    【解决方案1】:

    通常的方法是发送一个回调函数,异步任务完成后可以调用该函数。像这样的:

    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 将在key 可用时执行任何需要执行的操作。您的 finished 通常是匿名闭包。

    如果您查看任何 AJAX 库(例如 jQuery),您会看到很多这样的事情:您将函数传递给函数,函数一直向下传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2016-08-20
      • 1970-01-01
      • 2012-05-04
      相关资源
      最近更新 更多