【发布时间】:2016-10-31 00:23:48
【问题描述】:
我目前正在使用 Angular 的 $q 服务来进行这样的 API 调用:
var deferred = $q.defer();
$http.get(config.apiHost + details.url)
.success(function (data) {
deferred.resolve(data);
}).error(function (msg) {
deferred.reject(msg);
});
return deferred.promise;
但我们也可以不使用 $q 来使用这种方法:
return $http.get(config.apiHost + details.url)
.success(function (data) {
return data;
}).error(function (msg) {
return msg;
});
并且由于 $http 本身返回承诺,我还可以使用更简化的方法:
$http.get(config.apiHost + 'posts')
.success(function (data) {
console.log(data)
}).error(function (msg) {
console.log(msg);
});
那么 $q 和 $http 之间的所有这些特别是有什么区别,因为它们都返回 promise 并且都是 async ? angular 是否为 $q 提供了一些额外的功能? 我找不到任何好的答案。
【问题讨论】:
-
您可以使用 $q 与其他异步操作一起返回 Promise。 $http 从 AJAX 调用返回一个承诺。
-
其他操作如?
-
喜欢阅读文件或者需要使用$timeout
-
$q主要仅用于与默认情况下不支持 Promise 的库兼容和当您不能依赖 Promise 的本机实现时。没有理由(对你)以其他方式使用它。例如,如果您想创建一个基于承诺的$timeout。 -
好的,这意味着对于 API 调用,我们可以简单地使用 $http 而不是 $q,因为它们都返回 promise。 $q 仅在某些库本身不支持 Promise 时才有用。
标签: javascript angularjs angular-promise angularjs-http