Angular:阻塞/等待,直到承诺完成

Angular : block/wait until promise is done

本文关键字:承诺 阻塞 等待 Angular      更新时间:2023-09-26

在我看来,我需要对我的后端(用$http调用)进行一些额外的"表单验证"。要中止或触发表单发送,我需要等待$http返回的promise完成。

$('#myForm').submit(function() {
    ...
   $http(...).success(function(data) {
      if (data.condition){
          //send the form by returning true
          return true;
      } else {
          //stay on this page by returning false
          return false;
   });
   //what should I return here ?? 
}

一般来说,我们如何等待/block完成一个promise,比如$http()函数返回的promise?

承诺不会使代码同步。AJAX仍然是异步的。您需要异步处理您的代码。

因此,验证您的代码就像验证经典AJAX代码一样。

通常,答案是应该返回通过$http创建的promise。但是,在eventHandlers的情况下,可以显式调用preventDefault(),然后再调用submit()

var form = $('#myForm');
form.submit(function(e) {
   e.preventDefault(); // prevent submit
   $http(...).success(function(data) {
      if (data.condition){
          //send the form by explicit submit
          form.submit();
      }
   });
}

注意,在没有jQuery的新浏览器中,只需进行很小的修改,这也同样有效。

顺便说一句,良好的角度实践不鼓励这种事情——你应该把表示逻辑放在指令中,而不是像那样直接调用DOM方法。演示文稿"并不能决定"页面的命运。它通过ng-click委托给一个scope方法。