I don't know about the JIT implications of this (my understanding is that single-call try clauses don't inhibit optimization, but I could be wrong), but I use this idiom in the asyncListener polyfill:

```js
try {
  return fn.call(this);
}
finally {
  this.exit();
}
```