我知道可以通过Promise来实现,但我一直在努力寻找方法。

jQuery('.parentDiv').on('click', '.link', function(e) {
  jQuery.when(jQuery('.saveBtn').trigger('click', { 'evtData': 'link' })).then(function {
    // rest of the logic that should be performed on click of .link
  });
});


单击.saveBtn会调用一个名为doAjax的函数:

jQuery('.saveBtn').on('click', function() {
  doAjax()
});

function doAjax() {
  var ajaxCall = jQuery.ajax(ajaxObject);
  ajaxCall.done(function(data, status, xhr) {
    //some logic go here
  });
  return ajaxCall;
}


尽管如此,.then处理程序内部的逻辑还是要先执行,即在doAjax完成之前。

我相信我需要更改jQuery.when(jQuery('.saveBtn').trigger('click',{'evtData':'link'})),因为它可能未达到应有的Promise状态,并立即被标记为已解决,从而无需等待就执行回调。
我尝试在.saveBtn中返回doAjax,但这也没有任何区别。

请点子。

最佳答案

问题是因为trigger()不是异步函数,所以then立即被调用。直接单击doAjax()而不是伪造DOM事件,直接调用.link会更有意义。尝试这个:

jQuery(function($) {
  $('.parentDiv').on('click', '.link', function(e) {
    doAjax().then(function {
      // rest of the logic that should be performed on click of .link
    });
  });

  $('.saveBtn').on('click', function() {
    doAjax()
  });

  function doAjax() {
    var ajaxCall = $.ajax(ajaxObject);
    ajaxCall.done(function(data, status, xhr) {
      // some logic go here
    });
    return ajaxCall;
  }
});

09-18 05:36