我有一個名爲save()的函數,該函數收集頁面上的所有輸入,並執行AJAX調用服務器以保存用戶工作的狀態。Javascript中的線程安全?
保存()當用戶點擊保存按鈕,或者執行這就要求我們在服務器上的最新狀態。其他一些行動目前稱爲(生成例如頁面文件)。
我正在增加自動保存用戶工作的功能。首先,我想阻止AutoSave和用戶生成的保存同時運行。所以我們下面的代碼(我切割的大部分代碼,這是不是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's 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);
}
我的問題是,如果這個代碼是安全的?主流瀏覽器是否只允許一個線程執行一次?
我想過是不是會更糟糕,爲用戶點擊保存,並沒有得到響應,因爲我們是自動保存(我知道如何修改代碼來處理這一點)。任何人在這裏看到其他問題?
引用如果用戶單擊保存定時器將不火,直到保存功能完成? – JoshBerke 2010-02-12 17:11:25
如果我正確理解你,你問用戶是否啓動了保存,setTimeout啓動保存是否會輸入相同的方法。答案是否定的,它們不會同時在save()方法中。 – 2010-02-12 17:24:27
因爲這些信息有些過時,我們該怎麼做? JavaScript現在有多個線程:https://developer.mozilla.org/En/Using_web_workers – jmort253 2011-01-17 09:28:16