我一直在使用以下代码在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
应使用Promise,因此我将代码更改为:
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版本
好的,我发现了问题。实际上,有两个问题。
首先,我有一个多余的承诺已被删除:
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;
});
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句