У меня есть функция, называемая save(), эта функция собирает все входы на странице и выполняет вызов AJAX на сервер, чтобы сохранить состояние работы пользователя.
save() в настоящее время вызывается, когда пользователь нажимает кнопку сохранения или выполняет другое действие, которое требует от нас самого последнего состояния на сервере (например, сгенерировать документ со страницы).
Я добавляю возможность автоматического сохранения работы пользователя так часто. Сначала я хотел бы предотвратить автоматическое сохранение Автосохранения и сгенерированного пользователем сохранения. Таким образом, у нас есть следующий код (я сокращаю большую часть кода, и это не 1:1, но должно быть достаточно, чтобы передать идею):
var isSaving=false;
var timeoutId;
var timeoutInterval=300000;
function save(showMsg)
{
//Don't save if we are already saving.
if (isSaving)
{
return;
}
isSaving=true;
//disables the autoSave timer so if we are saving via some other method
//we won't kick off the timer.
disableAutoSave();
if (showMsg) { //show a saving popup}
params=CollectParams();
PerformCallBack(params,endSave,endSaveError);
}
function endSave()
{
isSaving=false;
//hides popup if it visible
//Turns auto saving back on so we save x milliseconds after the last save.
enableAutoSave();
}
function endSaveError()
{
alert("Ooops");
endSave();
}
function enableAutoSave()
{
timeoutId=setTimeOut(function(){save(false);},timeoutInterval);
}
function disableAutoSave()
{
cancelTimeOut(timeoutId);
}
Мой вопрос в том, безопасен ли этот код? Могут ли основные браузеры одновременно выполнять только один поток?
Одна мысль, что у меня было, было бы хуже, если бы пользователь нажал кнопку "Сохранить" и не получил ответа, потому что мы автосохраняемся (и я знаю, как изменить код, чтобы справиться с этим). Кто-нибудь видит другие проблемы здесь?