angularjs 异步请求中的简单 .then 或 $q 服务

angularjs simple .then or $q service in async requests

我不知道 AngularJS $q 服务和在异步请求后简单地使用 .then() 之间的确切区别是什么。

.then() 的简单示例:

function InboxService($http) {
  this.getEmails = function getEmails() {
    return $http.get('/emails');
  };
}

并且在使用该服务时(只是部分代码):

InboxService.getEmails()
.then(function (response) {
  // use response
});

$q 服务 和 resolve 和 reject 有什么区别?

What is the difference with $q service with resolve and reject ?

我假设您是在询问 var deferred = $q.defer() 与后续 deferred.resolve()deferred.reject() 的用法?在这种情况下,答案是您不需要它,因为您已经有一个由 $http 服务编辑的承诺对象 return。事实上,不推荐使用 $q 手动构造另一个新的承诺,并认为是 anti-pattern

如果您使用尚未包装到 promise 中的异步函数(超时,ajax-请求),那么在这种情况下您可能想要使用 $q 创建return 承诺。但是再一次,在您的情况下,您不需要它,因为 $http 服务为您构造了承诺,而另一个只是多余的。

$q 是多余的,在大多数情况下不需要。 http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/