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

时间:2014-04-10 08:59:01

标签: javascript angularjs promise

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

$('#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 ?? 
}

一般来说,我们如何等待/阻止承诺完成,例如$ http()函数返回的承诺?

2 个答案:

答案 0 :(得分:2)

通常,答案是应该返回通过$http创建的承诺。但是,对于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委托给范围方法。

答案 1 :(得分:2)

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

验证您的代码,就像使用经典的AJAX代码验证一样。