如何在Angular 2中每隔10秒调用一次函数?

时间:2017-06-20 11:11:52

标签: angular typescript angular2-template

如何在Angular 2中设置的时间间隔内调用函数。我希望在特定的时间间隔(例如10秒)调用/触发它。 对于Eg: ts文件

num: number = 0;
array: number[] = [1,5,2,4,7];
callFuntionAtIntervals(){
    if(num==5){
        num=0;    
    }
    num++;
}

HTML:

<div>{{ array[num] }}</div>

所以基本上div值会间隔变化

4 个答案:

答案 0 :(得分:10)

function()

无限循环,每隔10秒namespace EastWest.ViewModels { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; public partial class Country { [Key] public int CountryID { get; set; } public Nullable<int> CountryCode { get; set; } public string CountryName { get; set; } public string ISO2 { get; set; } public string ISO3 { get; set; } public Nullable<System.DateTime> CreateDateTime { get; set; } public Nullable<int> ActiveStatus { get; set; } public Nullable<int> CreatedBy { get; set; } public Nullable<System.DateTime> LastUpdateDateTime { get; set; } public string Remarks { get; set; } } } 被调用

答案 1 :(得分:2)

您也可以尝试使用传统的setInterval函数。

setInterval(() => {
    this.callFuntionAtIntervals();
}, 1000);

答案 2 :(得分:2)

在你的TS逻辑中,根据“interval”定义一个observable,它会发出值0,1,2,3,4,0,1,......

this.index = Observable.interval(10000).map(n => n % this.array.length);

在您的组件中,使用async展开该observable并使用它来索引数组。

{{array[index | async]}}

答案 3 :(得分:0)

请检查下面的内容可能有帮助,

我的要求:就像每隔5秒钟需要调用一个服务一样,如果我们取回所需的数据,则需要停止调用该服务并继续进行下一个流程。 5秒后再次进行其他呼叫服务。

停止服务调用的条件就像在重试最大次数后(在我的情况下为20次)或在一定时间(在我的情况下为120秒)之后。

注意:我在打字稿中使用

let maxTimeToRetry = 120000;  // in ms
let retryCount = 0;
let retryTimeout = 5000; // in ms
let maxRetries = 20;
const startTime = new Date().getTime();

// Need to use self inside of this, inside setInterval method;

const interval = setInterval(function () {
    retryCount++;  // INCREMENT RETRY COUNTER
    self.service.getData(requestParams).subscribe(result => {
      if (result.conditionTrue) {
        clearInterval(interval); // to stop the timer or to stop further calling of service
        //any execution after getting data
      }
    });

    if ((new Date().getTime() - startTime > maxTimeToRetry) || (retryCount === maxRetries)) {
      clearInterval(interval);
      // any execution 
    }

  }, retryTimeout);