Обычный подход заключается в отправке функции обратного вызова, которую асинхронная задача может вызывать после ее завершения.Примерно так:
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): вы передаете функции в функции, функциивесь путь вниз.