Причина, по которой ожидание не работает, заключается в том, что JavaScript в браузерах имеет только одну тему, поэтому занятый-ожидание предотвращало код от test1.js
от любого запуска. Занятие в ожидании почти никогда не является хорошей идеей в целом и по существу никогда не является хорошей идеей в браузере на основе JavaScript. :-)
В идеале эти два файла будут обеспечивать намеренный способ синхронизации между ними.
Но если нет событий, которые test2.js
можно использовать, и если это, безусловно, правильно ждать, пока a
не имеет значение, отличное от undefined
, вы можете использовать setTimeout
цикл:
test2.js
:
$(document).ready(function(){
function checkForA() {
if (typeof a === "undefined") {
// Keep waiting
setTimeout(checkForA, 10); // 50 = 50 milliseconds
} else {
// Got it
console.log(a);
}
}
checkForA();
});
Если можно избежать этого тайм-аута, используя какое-то уведомление от test1.js
, это было бы лучше; но в худшем случае, опрос каждые 50 мс или около того не является большим делом. Это может быть хорошей идеей, чтобы он отказаться от какой-то момент:
$(document).ready(function(){
var started = Date.now();
function checkForA() {
if (typeof a === "undefined") {
// Still don't have it, keep waiting?
if (Date.now() - start > 10000) { // More than 10 seconds
// Give up
console.log("Gave up waiting for a");
} else {
setTimeout(checkForA, 10); // 50 = 50 milliseconds
}
} else {
// Got it
console.log(a);
}
}
checkForA();
});
'while (typeof (a) ===" undefined ") {console.log (a); }; 'никогда не бывает хорошей идеей. Он заблокирует поток – mplungjan