Javascript同步请求到icCube

Javascript synchronous request to icCube

在显示之前,我需要合并名为 mdx1、mdx2 和 mdx3 的 3 个 MDX 请求的结果。

如何等待3个进程完成后再调用显示方法?

是否可以同步调用executeRequest方法?

代码结构如下:

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

如果你有jquery,你可以使用我们when and done。所以,只需将 executeRequest 放在 when 中,然后将结果合并到 done 中。

由于 icCube 使用的是 jQuery,这里有一个可能的解决方案,即使用 jQuery 的 when/done 功能。

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