1

私は、キー生成にParvez Anandamのpbkdf2.jsを使用するパスワードマネージャーWebアプリに取り組んでいます(つまり、テキストパスワードを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

デリバティブキーはすぐに返されるので、データがありません。最後の行に「1」が出力されます。これに対処する適切な方法は何ですか?Javaでは、Futureのようなオブジェクトを取り戻すことを期待します。これは、参加または待機できますが、バックエンドの習慣がUIコードに適していない可能性があることを認識しています。暗号化とフォームの送信に進むコールバックから「続行」関数を呼び出す必要がありますか?

4

1 に答える 1

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関数を提供し、が利用可能になったときに実行する必要があることは何でも実行します。あなたは通常匿名の閉鎖になります。keygenfinishedkeyfinished

AJAXライブラリ(jQueryなど)のいずれかを見ると、この種のことがたくさんわかります。関数を関数に渡し、関数をずっと下に渡します。

于 2011-09-29T06:58:17.467 に答える