我目前正在使用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本身就返回了Promise,因此我还可以使用更简化的方法:
$http.get(config.apiHost + 'posts')
.success(function (data) {
console.log(data)
}).error(function (msg) {
console.log(msg);
});
那么$q和$http之间有什么区别呢?它们都返回promise并且都是异步的。Angular是否提供了一些额外的功能来处理$q?我无法找到任何好的答案。
$q
主要用于与默认不支持 Promise 的库兼容,并且 当您不能依赖原生的 Promise 实现时。否则,您没有理由使用它。例如,如果您想创建一个基于 Promise 的$timeout
,那么可以使用它。 - Dan