Elixir Try Catch -


i trying figure out scoping issue. have procedural function setting bunch of related resources on aws. need able catch failure , rollback relations have been setup. have try catch setup, variables in try block not available in catch, need them can take correct steps rollback.

try   c = connection   cert = aws.cert   module = aws.create_mod(cert)   etc... rescue   :error ->       rollback(c, cert, module) end 

any advice how handle this?

this happens because elixir cannot guarantee variables set time exception raised. may not case you, imagine this.

try   foo = do_something_safe()   bar = do_something_that_will_raise_an_error()   baz = do_something_else_safe()   ... rescue   runtimeerror ->     quux(foo, baz) end 

in previous example, call do_something_that_will_raise_an_error() raise error. both bar , baz not set because of it.

in specific case, may able like

baz = do_something_else_safe() foo = do_something_safe() try   bar = do_something_that_will_raise_an_error()   ... rescue   runtimeerror ->     quux(foo, baz) end 

now, if call do_something_that_will_raise_an_error() raises error, still have foo, , baz variables set, , can used in rescue block.

basically, setup variables can outside of try. this gives nice little overview of variable scope inside of try ... rescue.

with in mind, might better setup supervisor , inside of genserver (or other supervised process really). way, if crashes, supervisor can decide it. both elixir , erlang of mindset "let crash" instead of trying program defensively.


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -