JavaScript synchronization options JavaScript synchronization options ajax ajax

JavaScript synchronization options


I can offer a possible solution, but without seeing the code ... not completely sure what you are doing, but there is no reason why you couldn't do this.

Basic code in jQuery : (not tested and abbreviated ... but I have done things similar)

var needAllThese = {};$(function(){      $.ajax("POST","/somepage.aspx",function(data) {          needAllThese.A = "VALUE";      });      $.ajax("POST","/somepage2.aspx",function(data) {          needAllThese.B = "VALUE";      });      $.ajax("POST","/somepage3.aspx",function(data) {          needAllThese.C = "VALUE";      });      startWatching();});function startWatching() {   if (!haveEverythingNeeded()) {       setTimeout(startWatching,100);       return;   }   everythingIsLoaded();}function haveEverythingNeeded() {    return needAllThese.A && needAllThese.B && needAllThese.C;}function everythingIsLoaded() {   alert("Everything is loaded!");}

EDIT: (re: your comment)

You're looking for callbacks, the same way jQuery would do it.

   var cache = {};   function getSomeValue(key, callback) {       if (cache[key]) callback( cache[key] );       $.post( "url",  function(data) {           setSomeValue(key,data);           callback( cache[key] );       });    }   function setSomeValue(key,val) {        cache[key] = val;   }   $(function(){               // not sure you would need this, given the code above        for ( var i = 0; i < some_length; ++i)  {            $.post( "url", function(data){                 setSomeValue("somekey",data);             });        }        getSomeValue("somekey",function(val){                         $("#element").txt( val );                      };                });


Javascript is inherently single-threaded, at least for the normal browser environment. There will never two simultaneous executions of scripts accessing the same document. (the new Javascript worker threads might be an exception here, but they're not meant to access documents at all, just to communicate by message passing).


I have found solution for my problem. I have to say it's not that perfect as I was looking for, but so far it works and I think about that more as temporarily work around.

$.post( "url1", function( data){     // do some computation on data and then     setSomeValue( data);});var setSomeValue = ( function(){    var cache = {};    return function( data)    {        if ( cache[data] == "updating")        {             setTimeout( function(){ setSomeValue( data);}, 100);             return;        }        if ( !cache[date])        {             cache[date] = updating;             $.post( "url2", function( another_data)             {                  //make heavy computation on another_data                  cache[data] = value;                  // update the UI with value             });        }        else        {             //update the UI using cached value        }    }})();