Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待2个AJAX请求完成(d3.js)以优化临时等待?_Ajax_D3.js - Fatal编程技术网

等待2个AJAX请求完成(d3.js)以优化临时等待?

等待2个AJAX请求完成(d3.js)以优化临时等待?,ajax,d3.js,Ajax,D3.js,我需要2个ajax请求在运行第一个请求的回调函数run_ACTIONS()之前完成,但是如何等待它(优化临时等待) 如果不这样做,则使用常规回调概念: function dostuff(callWhenDone) { // ... d3.tsv(ajaxUrl, function callWhenTSVCompletes(data) { // ... d3.json(ajaxUrl, function callWhenJSONCompletes(header) {

我需要2个ajax请求在运行第一个请求的回调函数run_ACTIONS()之前完成,但是如何等待它(优化临时等待)


如果不这样做,则使用常规回调概念:

function dostuff(callWhenDone) {
  // ...
  d3.tsv(ajaxUrl, function callWhenTSVCompletes(data) {
    // ...
    d3.json(ajaxUrl, function callWhenJSONCompletes(header) {
      //...
      callWhenDone(); // now we're done.
    });
  });
}

使用这段代码,我同时运行2个AJAX查询,并在运行回调函数run_ACTIONS()之前等待最后一个答案。但这种方法在我看来并不优雅

function ajax() {
  var ready=false,
      datatsv=false;

  d3.tsv( ajaxUrl,
        function(data) {
            if (ready)
                RUN_ACTIONS(HEADER, data);
            else {
                ready=true;
                datatsv=data;
            }
        }
   );
   d3.json( ajaxUrl,
        function(header) {
            define_Header(header);
            if (ready)
                RUN_ACTIONS(header, datatsv);
            else {
                ready=true;
            }
        }
   );
 }

如果你有时间的话,会更漂亮/更干净一点:这种方法会变慢,因为我的php查询tsv持续3秒,我需要快速回答。不知道tsv和JSON做什么,这就是你的问题。如果你不需要等待TSV,那么把它关掉,然后忘记它。如果你做了,3秒钟是你自己做的@AdamPearce有很多级联修饰语,对于两个调用,您可能不需要使用瀑布或回调队列,也可以使用Mike Bostock的队列:
function ajax() {
  var ready=false,
      datatsv=false;

  d3.tsv( ajaxUrl,
        function(data) {
            if (ready)
                RUN_ACTIONS(HEADER, data);
            else {
                ready=true;
                datatsv=data;
            }
        }
   );
   d3.json( ajaxUrl,
        function(header) {
            define_Header(header);
            if (ready)
                RUN_ACTIONS(header, datatsv);
            else {
                ready=true;
            }
        }
   );
 }