Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript waitForKeyElement.js,但具有最大等待时间_Javascript_Jquery_Greasemonkey_Tampermonkey - Fatal编程技术网

Javascript waitForKeyElement.js,但具有最大等待时间

Javascript waitForKeyElement.js,但具有最大等待时间,javascript,jquery,greasemonkey,tampermonkey,Javascript,Jquery,Greasemonkey,Tampermonkey,使用时,我想知道是否有一个很好的解决方案来实现最大等待时间?有时我有一些应该在那里的元素,但有时在一个糟糕的ajax响应中它们不会出现,或者它们可能需要一段时间才能出现。在这种情况下,我只是希望它继续运行并执行一个单独的函数 编辑:例如,当尝试“购买”一个项目时,它通常总是以一个“成功”框响应,这是程序正在等待的,但是,如果服务器出现错误或该项目不再可“购买”,则有时不会出现此框,在这种情况下,可能会插入不同的错误元素,但是,这是一个不同的元素,因此它将继续等待,而不是继续处理下一个项目 该问题

使用时,我想知道是否有一个很好的解决方案来实现最大等待时间?有时我有一些应该在那里的元素,但有时在一个糟糕的ajax响应中它们不会出现,或者它们可能需要一段时间才能出现。在这种情况下,我只是希望它继续运行并执行一个单独的函数


编辑:例如,当尝试“购买”一个项目时,它通常总是以一个“成功”框响应,这是程序正在等待的,但是,如果服务器出现错误或该项目不再可“购买”,则有时不会出现此框,在这种情况下,可能会插入不同的错误元素,但是,这是一个不同的元素,因此它将继续等待,而不是继续处理下一个项目

该问题没有示例用例,也没有MCVE。这很有可能是一场灾难

这就是说,没有优雅的方法来设置最大等待时间(因为以前从来没有需要或要求过)

您可以通过以下代码获得效果:

const maxTime       = 5;  //  seconds
var watchdogTimer   = setTimeout (fallBackFunc, maxTime * 1000);
waitForKeyElements ("#foo", desiredFunc, true);

function desiredFunc (jNode) {
    console.log ("Foo found!");
    clearTimeout (watchdogTimer);
}
function fallBackFunc () {
    console.log ("Oh, poo. No foo.");
}


在这种情况下,卸载
waitforkyelments
计时器是不必要的,但您也可以通过在
fallBackFunc()的末尾添加以下代码来完成此操作:

function fallBackFunc () {
    console.log ("Oh, poo. No foo.");

    /*-- Optional body double to take fire from waitForKeyElements that the 
        has `true` parameter set.  This is almost never needed.
    */
    var nonce = "IdeallySomeGloballyUniqueStringThatIs_a_ValidCssClass";
    //-- Added node should have properties that match the WFKE selector
    $("body").append (`<span id="foo" class="${nonce}" style="display:none;">blah</span>`);
    setTimeout (function () {$(`.${nonce}`).remove(); }, 333); // time must be > 300
}

作为奖励,这种方法:(a)不必等待最大计时器耗尽;(B)如果没有为每种情况设置足够长的max timer,则不会发生中断。

我添加了更多关于我想做什么的示例/细节,但我会看看你的答案,我认为这会实现我想要的。@BrockAdams我不知道我能够将这样的选择器与WFKE结合使用,那应该解决我的问题了!
waitForKeyElements ("#goodNode, #errorNode", completeTransaction, true);

function completeTransaction (jNode) {
    if (jNode.is ("#goodNode") ) {  //  Match one of the WFKE selectores
        console.log ("Transaction success!");
    }
    else {
        console.log ("Transaction error.");
    }
}