Что в действительности делает $ q.defer ()?

Я изучаю Angular JS и в данный момент пытаюсь понять об обещаниях и асинхронном программировании, и у меня есть сомнения относительно$q.defer(), Моя точка зрения следующая: обычно, когда люди работают с обещаниями, они делают что-то подобное, учитывая, что $ q уже доступен

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

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

    return deferred.promise;
}

Что это на самом деле делает? Когда мы делаемvar deferred = $q.defer() он немедленно переключает все выполнение этой функции в другой поток и возвращает обещание, являющееся ссылкой на результаты этой операции, которая все еще там выполняется?

Об этом мы должны думать при создании асинхронных методов?

Ответы на вопрос(2)

Ваш ответ на вопрос