加载完成后触发回调

时间:2016-07-13 11:21:57

标签: angularjs http asynchronous callback

我有这个函数在加载类别名称后回调文章。我的问题是因为$ http是异步的,所以在完成对类别名称的加载之前触发回调。 我是一个有角度的初学者,所以一些帮助会很好,我试图解决这个问题大约5小时。谢谢。

忘记添加我的其他方法:

    function getData(callback) {
    $http.get('http://www.myurl.de/wp-json/wp/v2/posts')
      .then(function(res) {
        var articles = res.data;
        setCategory(articles, function(result) {
          cachedData = result;
          callback(result);
        });

      });
  }
    function setCategory(articles, callback) {
    for (var j = articles.length - 1; j >= 0; j--) {
      var article = articles[j];
      for (var i = article.categories.length - 1; i >= 0; i--) {
        if (article.categories[i] === 614) {
          article.categories.splice(i, 1);
        }
        $http.get('http://www.myurl.de/wp-json/wp/v2/categories/' + article.categories[i])
          .then(function(res) {
            article.categories = res.data.name;
            articles[j] = article;
            if (j == 0 && i == 0) {
              callback(articles);
            }
          });
      }

    }

  }

1 个答案:

答案 0 :(得分:1)

我想首先说,如果可能的话,使用1 ajax请求获取所有文章...因为这么多请求效率非常低......

但这是你需要做的才能让它发挥作用......

你需要在加载函数完成后运行promise内的callack才能运行,如果你想使用多个请求,只有在完成之后你应该检查回调是否在数组的末尾,< / p> 像这样:

function setCategory(articles, callback) {
    for (var j = articles.length - 1; j >= 0; j--) {
        var article = articles[j];
        for (var i = article.categories.length - 1; i >= 0; i--) {
            if (article.categories[i] === 614) {
                article.categories.splice(i, 1);
            }
            $http.get('http://www.myurl.de/wp-json/wp/v2/categories/' + article.categories[i])
                .then(function (res) {
                    article.categories = res.data.name;
                    articles[j] = article;

                    // only run the callback at the last response
                    if (j == 0 && i == 0) {
                        callback(articles);
                    }
                });
        }

    }

}