【问题标题】:Using javascript how to break the while loop after a set time? [duplicate]使用javascript如何在设定时间后打破while循环? [复制]
【发布时间】:2015-12-03 14:54:09
【问题描述】:

我有一个如下所示的 while 循环:

while(s1 != "#EANF#")
{
iimPlay("CODE:REFRESH");
iimPlay("CODE:TAG POS=1 TYPE=* ATTR=TXT:Contacted:* EXTRACT=TXT")
var s1 = iimGetLastExtract();
}

它将刷新网页,直到找到它想要的内容。但是有时它会变成一个无限循环,我想简单地设置一个计时器,以便它会打破 while 循环并继续。我尝试查看 settimeout 但不知道该怎么做。我希望这个 while 循环放弃刷新网页,如果它在 3 分钟后找不到它想要的内容。

【问题讨论】:

  • 你不能写这样的 JS 代码。 iimGetLastExtract 是做什么的?是异步的吗?
  • 什么是iimPlay?无论如何,如果您正在刷新页面,那么您将从头开始运行 JavaScript,从而进入一个循环。
  • settTimeout 是要走的路。它将返回一个数字,使用此数字您可以取消将其传递给 clearTimeout 函数的执行。
  • 抱歉忘了提到我在使用 iMacros 和这个 javascript,所以本质上是:iimPlay("CODE:REFRESH");
  • 好吧...我不知道宏,但是如果它有一个像 onResultChange 这样的监听器,那么你可以使用它,否则你应该首先考虑两件事。 'iimGetLastExtract();'可能在 0.5 或 100 秒后包含结果,因此您应该有一个循环来检查每 1 秒以查看它是否返回结果,然后您需要在 3 分钟后取消该计时器,说明它不会工作。跨度>

标签: javascript loops timer break imacros


【解决方案1】:

关于您的问题,您可以定义一个标志变量并在 while 循环中检查它并在计时器中更改其值。

喜欢:

你的 while 循环:

while(mflag==0){
    //codes
}

你的定时器功能

Function mtimer(){
    mflag=1;
}

在while循环之前的某个地方:

var mflag=0;
var mt= setTimeout(mtimer,3*60*1000);

但我想说的是,我认为您在 while 循环中刷新网页的方法是错误的。也许你应该使用 Ajax 什么的。如果您提供有关您将要做的整个事情的更多信息,我可能会提供帮助。

【讨论】:

    【解决方案2】:

    编辑:这可能不是正确答案...请参阅 cmets


    您可以在 while 循环条件中使用 3 分钟后翻转的标志:

    var keepGoing = true;
    setTimeout(function() {
        // this will be executed in 3 minutes
        // causing the following while loop to exit
        keepGoing = false;
    }, 180000); // 3 minutes in milliseconds
    
    while(s1 != "#EANF#" && keepGoing === true)
    {
    iimPlay("CODE:REFRESH");
    iimPlay("CODE:TAG POS=1 TYPE=* ATTR=TXT:Contacted:* EXTRACT=TXT")
    var s1 = iimGetLastExtract();
    }
    

    【讨论】:

    • 不错的方法!我从来没有意识到
    • 我该判断谁,但这不是您应该寻找的方法。 @Lukas Morkunas
    • 好吧...我不知道宏,但如果它有一个像 onResultChange 这样的监听器,那么你可以使用它,否则你应该首先考虑两件事。 'iimGetLastExtract();'可能在 0.5 或 100 秒后包含结果,因此您应该有一个循环来检查每 1 秒以查看它是否返回结果,然后您需要在 3 分钟后取消该计时器,说明它不会工作。跨度>
    • 这行不通。
    • 这不起作用,因为 javascript 和事件循环的工作方式。 setTimeout 的 timeout 函数没有机会运行,因为 javascript 在 while 循环中同步迭代。您不妨保存一个限制时间戳并将 Date.now() 与循环中的该时间戳进行比较。
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 2020-07-04
    • 1970-01-01
    • 2019-08-24
    • 2018-02-08
    • 2016-02-24
    • 2021-04-09
    • 2020-09-18
    相关资源
    最近更新 更多