JavaScript synchronization options

前端 未结 6 879
庸人自扰
庸人自扰 2021-02-04 13:44

I was wondering whenever exists a solution to perform synchronization in JavaScript code. For example I have the following case: I\'m trying to cache some response values from A

6条回答
  •  闹比i
    闹比i (楼主)
    2021-02-04 13:57

    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 );              
            };            
        });
    

提交回复
热议问题