Search code examples
javascripticcubeiccube-reporting

Javascript synchronous request to icCube


I need to combine the results of 3 MDX requests named mdx1, mdx2 and mdx3 before displaying them.

How do I wait for the 3 processes to complete before calling the display method?

Is it possible to call the executeRequest method synchronously?

Here is the code structure:

executeRequest(new viz.MdxGviRequest(mdx1), {}, function(gviTable) {
// process result1
});
executeRequest(new viz.MdxGviRequest(mdx2), {}, function(gviTable) {
// process result2
});
executeRequest(new viz.MdxGviRequest(mdx3), {}, function(gviTable) {
// process result3
});

// combine result1, result2 and result3 into result
// display result using Google table chart

Solution

  • As icCube is using jQuery here is a possible solution using the when/done feature of jQuery.

    var res1_done = $.Deferred();
    var res2_done = $.Deferred();
    var res2_done = $.Deferred();
    
    var res1, res2, res3;
    
    function onAllResultDone() {
       // handle here your results (res1/res2/res3)
    }
    
    $.when( res1_done, res2_done, res3_done ).done(function() {
      onAllResultDone();
    });
    
    executeRequest(new viz.MdxGviRequest(mdx1), {}, function(gviTable) {
      res1 = ...;
      res1_done.resolve();
    });
    executeRequest(new viz.MdxGviRequest(mdx2), {}, function(gviTable) {
      res2 = ...;
      res2_done.resolve();
    });
    executeRequest(new viz.MdxGviRequest(mdx3), {}, function(gviTable) {
      res3 = ...;
      res3_done.resolve();
    });