这是我期望发生的事情,我使用anulgarjs作为控制器
1.单击按钮时,调用http post函数并返回布尔值
2.返回的布尔值是检查条件
3.如果是,请将网址附加到href属性的html元素,然后立即点击
4.如果错误,会弹出一个模型
$scope.checking = function(arg){
$http.post('path/').success(function(r){
// r is a boolean value
deferral.resolve(r);
});
return deferral.promise;
};
第二个功能
$scope.secondfun =function(){
url= 'someurl'
$scope.checking().then(function(r){
if(r){
$('#htmlelement').attr('href', url);
}
else{
$('#somemodal').modal('toggle');
}
});
}
问题:订单不是我预期的 在点击按钮后,模型或网址不会立即显示。相反,当我再次点击按钮时它会显示
与此同时,由于我不确定我是否正确使用了承诺,我在第二个函数上尝试了类似的东西:
$scope.secondfun = function(){
url= 'someurl';
var bool = false;
$scope.checking().then(function(r){
bool = r;
});
if(bool){
$('#htmlelement').attr('href', url);
}
else{
$('#somemodal').modal('toggle');
}
};
问题:if子句在分配bool之前执行,bool未定义
所以,我只需要一些帮助来解决问题
答案 0 :(得分:3)
尝试将检查功能更改为此
$scope.checking = function(arg){
return $http.post('path/')
.then(function(r) {
return r;
},function(error){
return error;
});
}
答案 1 :(得分:3)
检查时只需返回承诺
f:ajax
然后就像你正在做的那样使用那个承诺
f:ajax