我一直在使用以下代码在Angular中进行ajax调用,到目前为止工作正常:
function getData (url) {
var deferred = $q.defer();
$http.get(url, {
cache: true
}).success(function (data) {
deferred.resolve(data); // works
});
return deferred.promise;
}
正如您所看到的,只有成功处理程序。当我想添加错误处理程序时,我注意到文档声明success
和error
已被删除,不应再使用(https://docs.angularjs.org/api/ng/service/ $ http)。相反应该使用.then
承诺,所以我将代码更改为:
function getData (url) {
var deferred = $q.defer();
$http.get(url, {
cache: true
}).then(function (data) {
deferred.resolve(data); // Not called :(
}, function () {
deferred.resolve(false); // Not called :(
});
return deferred.promise;
}
现在一切都停止了。永远不会调用.then
。为什么?我是最新的Angular 1.4版本
答案 0 :(得分:0)
好的,我发现了问题。实际上,有两个问题。
首先,我有一个多余的承诺,我删除了:
function getData (url) {
return $http.get(url, {cache: true});
}
其次,来自.then
的返回数据似乎与.success
略有不同。它不返回普通结果数据,而是返回一个带有来自调用的元数据的对象。因此,为了获取数据,我必须访问data.data
:
pub.getList = function () {
return getData(serviceurl + "?c=latest").then(function (result) {
var list = result.data;
precacheArticles(list);
return list;
});
};