如何延迟$ httprequest?

时间:2018-01-06 00:51:59

标签: javascript angularjs

我试图像这样延迟我的$ http电话:

 githubService.getUserEvents = function getUserEvents() {
      return $timeout(
      $http.get(ANGULAR_EVENTS).then(function (eventsData) {
        return _.map(eventsData.data, function (data) {
          return {
            type: data.type,
            user: data.actor.login,
            avatarUrl: data.actor.avatar_url,
            createdOn: data.created_at,
            repo: data.repo.name
          };
        });
      }),
        5000);
      };

当我运行它时似乎没有执行延迟的请求,我在chromeconsole中看不到任何错误?另请参见此处jsbin

如何在不使用拦截器的情况下调用延迟的$ http请求?

jsbin

1 个答案:

答案 0 :(得分:2)

删除的答案有这个权利我认为,你确实需要延期,因为你无法从$ timeout返回,同时注释需要注入$ timeout服务。

githubService.getUserEvents = function getUserEvents() {
  var deferred = $q.defer();
  $timeout(
  function(){
    $http.get(ANGULAR_EVENTS).then(function (eventsData) {

    deferred.resolve(_.map(eventsData.data, function (data) {
      return {
        type: data.type,
        user: data.actor.login,
        avatarUrl: data.actor.avatar_url,
        createdOn: data.created_at,
        repo: data.repo.name
      };
    }));
  })

  },2000);
  return deferred.promise;

};

看起来我在这里查看了公共API限制但应该可以使用。

<强> 修改 只是回复了$ timeout承诺的评论,它似乎在这里工作(当我昨天开始尝试时,即使在修复$ timeout之后,似乎也没有用,所以不确定出了什么问题但是在这里&#39 ; s函数在不创建额外延迟对象的情况下工作)

githubService.getUserEvents = function getUserEvents() {

  return $timeout(function(){
    return $http.get(ANGULAR_EVENTS).then(function (eventsData) {

    return _.map(eventsData.data, function (data) {
      return {
        type: data.type,
        user: data.actor.login,
        avatarUrl: data.actor.avatar_url,
        createdOn: data.created_at,
        repo: data.repo.name
      };
    });
  })

  },2000);
};

我还是要在评论中坚持自己的观点。只要你知道让你自己的推迟会有一些开销,而你无需通过整个承诺链解决任何问题,那么我就不会在第一时间看到这样做的问题(而且我发现它更容易了解)。然而,仅仅为了澄清,$ timeout承诺确实解决了它触发的函数返回的值(这是有道理的但是文档听起来好像$ timeout解决了函数被触发的那一刻而不是它完成时...没有&# 39;通过tbh)来到文档的返回部分。