Angular:阻塞/等待,直到承诺完成
Angular : block/wait until promise is done
在我看来,我需要对我的后端(用$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方法。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- JavaScript承诺-无法读取属性'那么'的未定义
- 承诺.当一个promise失败时,All不会触发catch()阻塞
- Angular:阻塞/等待,直到承诺完成
- ES6承诺阻塞页面