Javascript waitForKeyElement.js,但具有最大等待时间
使用时,我想知道是否有一个很好的解决方案来实现最大等待时间?有时我有一些应该在那里的元素,但有时在一个糟糕的ajax响应中它们不会出现,或者它们可能需要一段时间才能出现。在这种情况下,我只是希望它继续运行并执行一个单独的函数Javascript waitForKeyElement.js,但具有最大等待时间,javascript,jquery,greasemonkey,tampermonkey,Javascript,Jquery,Greasemonkey,Tampermonkey,使用时,我想知道是否有一个很好的解决方案来实现最大等待时间?有时我有一些应该在那里的元素,但有时在一个糟糕的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.");
}
}