I think using curly braces (in `{ p.complete }`) when the function doesn't take parameters is a bit confusing. How about this:
```scala
try f(v).onComplete(p.complete) catch { case NonFatal(t) => p failure t }
```