SetInterval使用JavaScript处理不同的消息

时间:2018-10-10 20:40:13

标签: javascript

var i = 0;
var sampleMessages = ["First message", "Second message", "Third"];

heartbeatInterval = setInterval(function() {
  while (i <= sampleMessages.length) {
    alert(sampleMessages);
    window.eval(eoWebBrowser.extInvoke("applicationHeartbeat", data));
  }
}, 5000)

我正在尝试构建应用程序,并且使用setInterval时遇到了问题。 我正在使用setInterval,可以在特定时间间隔内发送消息。但是我想发送不同的消息。

例如,如果我的时间间隔为5000,则第一则消息必须为 message1 ,五秒钟后,第二则消息必须为 message2 ,依此类推。我只想用JavaScript而不是jQuery或其他语言编写代码。

2 个答案:

答案 0 :(得分:0)

如果要在特定时间间隔内以特定顺序显示消息,则可以使用类似的内容。由于警报可能阻止下一个通知,因此我将其更改为使用console.log而不是alert

var i = 0;
var sampleMessages = ["First message", "Second message", "Third"];

var heartbeatInterval = setInterval(function() {
  // if we still have messages to show
  if (sampleMessages.length > 0) {
    // display the next message from the array
    console.log(sampleMessages.shift());
  } else {
    // clear the interval, we don't have any messages left to display
    clearInterval(heartbeatInterval);
  }
}, 5000)

此操作的一个关键是Array.prototype.shift()方法,该方法删除数组中的第一个元素并返回它。此操作的另一个重要方面是对WindowOrWorkerGlobalScope.clearInterval()的调用,当您没有任何要显示的消息时,它将停止您的时间间隔。因此setInterval返回间隔的ID,然后将其传递给clearInterval以停止计时器。

编辑: 如果您只需要发送“心跳” +递增计数,则可以执行以下简单操作:

var heartBeatCount = 1;

setInterval(function() {
  // this assumes the data property you passing here needs to be the count
  // if thats not the case the use this instead
  // eoWebBrowser.extInvoke("applicationHeartbeat" + (heartBeatCount++), data)
  eoWebBrowser.extInvoke("applicationHeartbeat", heartBeatCount++)
}, 5000)

答案 1 :(得分:0)

函数中不应该包含循环,因为每次运行函数时都会处理整个数组。相反,应该在间隔函数之外声明索引,您只需将索引递增一次,然后显示该消息即可。

此外,在将索引与数组长度进行比较时,应使用<

var messageIndex = 0;
heartbeatInterval = setInterval(function() {
  if (messageIndex < sampleMessages.length) {
    alert(sampleMessages[messageIndex]);
    window.eval(eoWebBrowser.extInvoke("applicationHeartbeat", data));
    messageIndex++;
  } else {
    clearInterval(heartbeatInterval);
  }
}, 5000)