Как я могу вернуть обещание, но сразу же вызову его блок отказов? Здесь грубый способ сделать это:
if (fail) {
var q = $q.deferred();
$timeout(function() {
q.reject("")
}, 1);
return q.promise;
} else {
return $http.get("/").then(function(data) {});
}