У вопроса нет ни примера использования, ни MCVE.Есть большая вероятность, что это XY Проблема .
Тем не менее, нет элегантного способа установить максимальное время ожидания (потому что никогда не было ни необходимости, ниспрос на него раньше) .
Эффект можно получить с помощью кода:
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.");
}
Выгрузка waitForKeyElements
таймер в таком сценарии не должен быть необходим, но вы также можете сделать это, добавив следующий код в конце 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
}
Относительно вопроса отредактируйте:
... (страница) отвечает «успехом», то есть тем, чего ожидает программа, однако иногда это поле не происходит ... в этом случаевместо этого может быть вставлен другой элемент ошибки ...
Обычная практика для этого - установить waitForKeyElements
для прослушивания и узла успеха и узла ошибки.(См. селекторы jQuery doc .)
В таком случае waitForKeyElementscallback предпримет соответствующее действие для типа переданного ему узла.
Не требуется сторожевой таймер (если страница не может остатьсяактивен и все же не возвращает ни один тип узла - что почти никогда не имеет место).
Например:
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.");
}
}
В качестве бонуса, этот подход: (A) не нужно ждать истечения максимального таймера и (B) не подвержен взломуесли максимальный таймер не установлен достаточно долго для каждого обстоятельства.