Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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
Javascript setTimeout()回调完成后执行JS代码_Javascript_Jquery - Fatal编程技术网

Javascript setTimeout()回调完成后执行JS代码

Javascript setTimeout()回调完成后执行JS代码,javascript,jquery,Javascript,Jquery,我有以下代码: function newGraphic() { $.post('./lexiconGraph.pl', { 'tag' : this.getAttribute('apolo'), 'apoloKey' : this.id, 'h' : surface.h, 'w' : surface.w, 'operation' : 'newGraphic' }, function(result) { minGraphic(); /

我有以下代码:

function newGraphic() {
  $.post('./lexiconGraph.pl', {
    'tag' : this.getAttribute('apolo'),
    'apoloKey' : this.id,
    'h' : surface.h,
    'w' : surface.w,
    'operation' : 'newGraphic'
  }, function(result) {
    minGraphic();
    // STOP AND WAIT //
    document.getElementById('container').innerHTML = result;
    getNodes();
    // STOP AND WAIT //
    maxGraphic();
  });
}

function minGraphic() {
  if (z > 0.01) {
    zoom(parseFloat(z - 0.01));
    setTimeout('minGraphic();', 5);
  }
}
问题是:函数minGraphic会创建一个持续时间未知的“动画效果”(取决于图形的大小)。我需要找到一种方法,使以下行仅在函数minGraphic完成时执行。
有人知道我该怎么做吗?

注意:在函数minGraphic中放入以下行不是一个选项,因为我已经在其他地方使用了此函数。

在动画完成时使用回调。大概是这样的:

function newGraphic() {
  $.post('./lexiconGraph.pl', {
    'tag' : this.getAttribute('apolo'),
    'apoloKey' : this.id,
    'h' : surface.h,
    'w' : surface.w,
    'operation' : 'newGraphic'
  }, function(result) {
    var afterAnimation = function()
    {
      document.getElementById('container').innerHTML = result;
      getNodes();
      maxGraphic();
    };

    minGraphic(afterAnimation);
  });
}

function minGraphic(cb) {
  if (z > 0.01) {
    zoom(parseFloat(z - 0.01));
    setTimeout(function() { minGraphic(cb); }, 5);
  }
  else
  {
    if(cb) cb();
  }
}
如果我的操作正确,那么这将触发miniGraphic的启动,将回调传递给一个函数,该函数将在动画完成后执行(即z不>0.01)。当该事件发生时,如果传入回调(
cb
),它将调用该函数,从而触发动画中的下一步

如果您需要等待
maxGraphic
方法,那么您可以采用相同的概念


或者,如果jQuery对您可用,那么jQuery有内置的方式用于动画后回调,您可以使用这些方式

您可以使用回调吗

function minGraphic(callback) {
  if (z > 0.01) {
    zoom(parseFloat(z - 0.01));
    setTimeout($.proxy(minGraphic, this, callback), 5);
    return;
  }
  callback && callback();
}
然后只需调用如下函数:

minGraphic(function () {
    //complete
});

请注意,
callback
参数是可选的,可以向后兼容以前的代码,而不想知道操作何时完成。

如果无法编辑函数minGraphic,则提供解决方案似乎也不是一个选项。@Adam这不是真的。看看我的答案。@DerFlatulator-什么答案?@Adam,在我表示它不起作用后,它被删除了。这就是我在就寝后回答问题的结果