javascript - 刷新/定时器功能仅适用于 2 个提要中的 1 个 -- $q.all() 合并

标签 javascript angularjs timeout q

这是一个基于我之前的问题 here 的问题。

本质上,我使用了 $q.all() 方法来解析多个 http 调用。然后我过滤并合并两个数据源。

这一切都非常有效。但我希望我的两个提要之一每 5 分钟刷新一次。通常,我会通过将以下计时器附加到代码末尾来实现此目的

var timer = $scope.intervalFunction = function() {
    $timeout(function() {
       /* function to call $http.get again */
        $scope.intervalFunction(); 
    }, 300000)
}; 
timer(); 
$timeout.cancel(timer); 

我的问题是,由于我没有将 http 调用定义为单独的函数,并且我还“合并”两个源,因此如何仅调用这些源之一,然后进行相应更新而不制作多个列表项副本(这是我在多次尝试中发生过的事情)。

谢谢!

JSFiddle here

最佳答案

“我希望我的两个提要之一每 5 分钟刷新一次”。我不确定您是否可以使用两个 $q.all 请求之一来实现这一目的。我只是建议您在 $q.all 包装器之外发出另一个请求,并在获得第一个 $q 的结果后启动 $timeout 。所有请求。

需要说的是,我对此解决方案并不确定,因为我没有测试它,但希望这会起作用:

$q.all(promises)
  .then(function(response) { 
    metadata = response.metadataPromise.data;
    metrics = response.metricsPromise.data; 
    joinMetadataAndMetrics();
    requestEveryFiveMinutes(); 
  })
  .catch (error) (function (error) { 
    console.log(error);
  });

function requestEveryFiveMinutes() {
  $interval(function() {
    // here you can make the needed http request
    yourRequest()
      .then(function() {
        // handle the response as needed
      })
      .catch(function(err) {
        console.log(err);
      })
  }, 300000);
}

并且不要忘记在 Controller 中注入(inject)$interval

关于javascript - 刷新/定时器功能仅适用于 2 个提要中的 1 个 -- $q.all() 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44441702/

相关文章:

javascript - 以最小间隔触发 javascript 事件

c# - 超时已过。在操作完成之前超时期限已过,或者服务器没有响应。该语句已终止

javascript - 使用 JavaScript 验证电话号码

javascript - 我的下拉导航菜单不会停留在下方。无法点击子页面

c# - Typescript Angular 2 Http post 到 C# MVC

javascript - Angular 1.5 组件路由器兄弟组件

javascript - 通过 ID 从数组中获取特定 JSON 对象并返回 JSON 对象 (Javascript/JQuery)

javascript - 使用默认值解构嵌套对象,包括 Node

javascript - Angular +矩形+ typescript 装饰器错误

c# - Linux系统上的Azure表/Blob/队列随机超时(k8s .net core 3应用程序)