为什么AngularJS $ http .success承诺有效但是。然后呢?

时间:2015-08-19 15:56:38

标签: ajax angularjs

我一直在使用以下代码在Angular中进行ajax调用,到目前为止工作正常:

  function getData (url) {
    var deferred = $q.defer();
    $http.get(url, {
      cache: true
    }).success(function (data) {
      deferred.resolve(data); // works
    });
    return deferred.promise;
  }

正如您所看到的,只有成功处理程序。当我想添加错误处理程序时,我注意到文档声明successerror已被删除,不应再使用(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版本

1 个答案:

答案 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;
    });
  };