我正在编写javascript代码来更新用户的界面。 此任务必须在后台完成,不应阻止任何事情。 代码当前阻止/崩溃浏览器,while循环导致问题。
我想要的是等待检查和安装完成,然后再执行其他操作。我想避免在TimeOut中的TimeOut中编写场景:TimeOut,它确实有效,但它会使代码变得混乱。
updateChecking();
function updateChecking() {
setTimeout(function() {
if (settings.IsChecking === "True") {
var isChecking = false;
var isInstalling = false;
// PROBLEM, Wait till checking is completed
while (isChecking) {
var timerUpdateChecker = setInterval(function() {
getIsCheckingUpdates().done(function(resultIsChecking) {
if (resultIsChecking === "False") {
isChecking = true;
clearInterval(timerUpdateChecker);
}
});
}, 1000);
checkForSystemUpdates();
startCheckingDownloads();
// PROBLEM, Wait till installing is completed
while (isInstalling) {
setInstallerInterface();
var timerInstallChecker = setInterval(function() {
getIsInstallingUpdates().done(function(resultIsUpdating) {
if (resultIsUpdating === "False") {
isInstalling = true;
clearInterval(timerInstallChecker);
}
});
}, 1000);
}
viewUpdateInstalledAlert();
getAvailableUpdates();
unsetInstallerInterface();
};
}
}, 0);
}
任何可以解决我问题的建议?
答案 0 :(得分:2)
While
循环运行,直到条件为false
。现在,您将变量设置为false并调用while。所以我不确定它会如何发挥作用。根据我的理解,它应该是while(!isChecking)
。
也就是说,您应该尝试替换setTimeout
和setInterval
并替换为events
。您可以创建自定义事件,分派和收听。我认为它会更有效率。像这样:
var event = new Event('isInstalled');
在您安装的功能中,您将分派事件:
window.dispatchEvent(event);
你听这个事件来触发想要的功能。
window.addEventListener('isInstalled', function(){
//whatever needs to happen when installed is done
})