Avoid double callbacks when in async mode

The return (which includes a _get and subsequent callback) should be enclosed in the sync branch only  - otherwise, if you have a cache miss, the callback will be called twice - once in the async branch in the async setback, but also at the end of the function, in the return.