Here's a convenient shortcut: Just call $q.when() with no arguments, then place all of your synchronous code (that you want to behave asynchronously) in a subsequent .then() call. This will automatically pick up any results, or exceptions, and pass them on as promises.
E.g.
function myAsyncSqrt(value) {
return $q.when()
.then(function() {
return Math.sqrt(value);
});
}
...
var promise = myAsyncSqrt(16);
promise.then(
function(res) { alert('answer:' + res); },
function(err) { alert('uh oh:' + err); });