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或其他语言编写代码。
答案 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)