title: Thread Safety in Javascript?
body: <p>I have a function called save(), this function gathers up all the inputs on the page, and performs an AJAX call to the server to save the state of the user's work.</p>
  
  <p>save() is currently called when a user clicks the save button, or performs some other action which requires us to have the most current state on the server (generate a document from the page for example).</p>
  
  <p>I am adding in the ability to auto save the user's work every so often. First I would like to prevent an AutoSave and a User generated save from running at the same time. So we have the following code (I am cutting most of the code and this is not a 1:1 but should be enough to get the idea across):</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>My question is if this code is safe? Do the major browsers allow only a single thread to execute at a time? </p>
  
  <p>One thought I had is it would be worse for the user to click save and get no response because we are autosaving (And I know how to modify the code to handle this). Anyone see any other issues here?</p>