【问题标题】:Trigger callback after loading has finished加载完成后触发回调
【发布时间】:2016-11-15 23:01:57
【问题描述】:

我有这个函数可以在加载类别名称后回调文章。我的问题是,因为 $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);
            }
          });
      }

    }

  }

【问题讨论】:

  • 首先它会调用服务器上的许多ajax请求,它会降低你的页面加载速度。而不是您可以调用单个 ajax 调用并获取所有类别数据。
  • 我现在有点困惑,我怎样才能在一个单一的调用中传递它们?
  • 您可以发布值

标签: angularjs http asynchronous callback


【解决方案1】:

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

但这是你需要做的才能让它工作......

你需要在promise结果中设置callack,让它在加载函数完成后运行,如果你想使用多个请求并且只有在它完成后你应该检查回调是否在数组的末尾,

像这样:

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

    }

}

【讨论】:

  • 哦,我的糟糕,没有注意到你在循环中倒退,更新,但不要使用这么多请求,你会遇到性能问题,用一个请求替换它
  • 是的,它仍然不起作用,我意识到我忘了在我调用 setCategory 的地方添加方法,可能是那里的问题?
  • 但是没有你的代码行它可以工作,只有类别不会加载
  • 如果你在请求的回调之外设置了回调,那么 if 将异步运行,并且在请求完成后它不会运行,我添加的代码行只是运行回调的条件在最后一个请求之后
  • 我该如何避免这种情况?
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多