JS Syncronous警报功能

时间:2018-03-27 13:41:35

标签: javascript jquery sequential

我一直在寻找这么久的时间来寻求帮助......

我想要做的只是在另一个函数完成执行后显示alert()。我所指的部分是success来电的ajax

jQuery(document).on('click','a.remove_from_cart',function(event){
  event.preventDefault();
  startWait();
  var self = jQuery(this);
  jQuery.ajax({
    url:ajaxurl,
    type:'post',
    cache:false,
    data:{
      action: self.data('action'),
      post_id: self.data('id'),
      nonce: self.data('nonce')
    },
    success:function(data){
      if (data) {
        // some action
      }
      // please help me here
      stopWait().then(alert(data));
    }
  });
});

startWait()stopWait()是两个只添加/删除2个html元素的类的函数:

function startWait() {
  document.getElementById('wait').classList.add('active');
  document.body.classList.add('wait');
}
function stopWait() {
  var d = jQuery.Deferred();
  document.getElementById('wait').classList.remove('active');
  document.body.classList.remove('wait');
  return d.promise();
}

他们只是在内部显示/隐藏带有微调器的叠加层。

success通话的ajax方法中,我想先stopWait()隐藏叠加层,然后提醒一些信息。 我尝试了回调,承诺,延迟jQuery,我无法记住其他内容,我只是无法完成这项工作,首先alert()只有在我关闭alert(data)之后才会显示stopWait()完成它的工作。为什么呢?

请你帮我理解我在做错了什么? 谢谢!

编辑1:将alert()包装在函数中并不能解决问题。现在stopWait()被执行但是没有显示警告。请检查代码簿:https://codepen.io/usainicola/pen/GxOzqz

编辑2:问题已解决,此处是工作代码:https://codepen.io/usainicola/pen/MVORyd

1 个答案:

答案 0 :(得分:1)

你必须在返回之前解决承诺,如

function stopWait() {
 var d = $.Deferred();
 document.getElementById("wait").classList.remove("active");
 d.resolve();
 return d.promise();
}

请看一下更改的codepen edited code pen