Yeah, I wanted the discussion that is why I posted this comment :) Well, if exception is thrown inside Promise constructor it will be automatically rejected - that is ok for us. If it's thrown inside observer callback we'll hang.

I think we need only one try\catch inside observer callback where we call reject inside catch.

Regarding to reacting to fail callback I think it should be done by code who is calling this method as I proposed here :) https://github.com/mozilla-b2g/gaia/pull/17506#discussion_r11328443