> What does a try expression like this do? Returns null/undefined on a throw?
If an exception is caught, the expression evaluates to what the catch block evaluates to. (Similar to having if/else be an expression). Of course if the exception isn't caught then it propagates so the expression doesn't take a value.
I suspect you could do something like:
where attempt invokes the lambda, catches any exceptions, and does what you want