2015-07-02 2 views
3

Я пытаюсь выяснить обещания ... В чем разница между простое создание запроса $ http, а затем выполнение того, является ли успешным (.success()) &, он не работает (.fail()), по сравнению с обещание (q = $ q.defer()) с q.resolve()?

+0

Я не уверен, что понимаю ваш вопрос. Как вы делаете запрос '$ http' с' $ q.defer'? Если вы не сделаете запрос, то это, очевидно, разница. – Bergi

ответ

0

Ничего. $http методы возвращают обещания. Короче говоря, их также можно связать с помощью then. success и fail являются сахаром только для разрешения и отклонения then s.

3

$http сам использует $q. Эти службы не работают на одном уровне.

$http.get(url) возвращает обещание, которое может быть разрешено или отклонено. Это означает, что вы используете обещание, предоставляемое службой ($ http). Внутри, $http позвонит $q.defer(), затем $q.resolve() или $q.reject(). Это вызовет либо ваш метод .success(), либо .fail().

$q - это сервис, создающий ваше собственное обещание.

Использование $q - отличный способ узнать о обещаниях, но в вашем случае $http уже делает эту работу за вас.

+0

$ http legacy обещают методы успеха и ошибки/неудачи, устарели. https://docs.angularjs.org/api/ng/service/$http#deprecation-notice –

+0

Да, успех и ошибка/неудача были устарели в пользу тогда. Но основной ответ остается прежним. '$ http' возвращает обещание, а' $ q' создает «обещание». В 'then()' у вас все еще есть две функции обратного вызова для успеха и сбой. [$ HTTP] (https://docs.angularjs.org/api/ng/service/$http) – Yves

Смежные вопросы