O que $ q.defer () realmente faz?

Estou aprendendo sobre JS Angular e no momento estou tentando entender sobre promessas e programação assíncrona e tenho essa dúvida sobre$q.defer(). O que quero dizer é o seguinte: geralmente quando as pessoas trabalham com promessas, fazem algo assim, considerando que $ q já está disponível

function someAsyncFunction() {
    var deferred = $q.defer();

    /* Do things and if everything goes fine return deferred.resolve(result) 
       otherwise returns deferred.reject()
     */

    return deferred.promise;
}

O que isso realmente está fazendo? Quando fazemosvar deferred = $q.defer() muda imediatamente toda a execução dessa função para outro thread e retorna a promessa sendo uma referência aos resultados dessa operação que ainda está executando lá?

É assim que devemos pensar ao criar métodos assíncronos?

questionAnswers(2)

yourAnswerToTheQuestion