Unwrapping async calls with ‘!’
A ! postfix to a function call signals to Kaffeine that this is an unwrapped async call masquerading as a normal function call. Kaffeine will recompile it into a normal function call with the follow code wrapping into an async callback.
h4 Here is simple example
// simple call fish = $.get! '/fish' $("stomach").append fish // another simple call with implied () ok = stomach.save! meal.complete = ok
This is super useful for simplifying nested asynchronous calls (esp with nodejs) and works nicely in a number of scenarios:
// create convenient sleep function sleep = { setTimeout #1, #0 } // use it test_check = { if [email protected]() { sleep! 400 alert "STALEMATE" } }
// assignment from multi argument callback x = { err, x = $.get! "/" if !err, process x }
// three async calls unwrapped in series app.get "/stats", (req, res) { res.send { user_count: User.count!, task_count: Task.count!, pending_tasks: Task.count! "pending", } }
// if clause and as a function parameter handle = (callback) { if valid_session! @ { callback get_session! } else callback false }
When does the function unwrapping ‘stop’?
- at an unmatched right bracket (e.g. the end of a function or arg list),
- The end of the file
- Or the
—–
operator – added for completeness, but I have never actually needed it.
x = { result = shoot! user1 if result, user1.die! --- result = shoot! user2 if result, user.die! --- result = shoot! user3 if result, user.die! --- }