这是我期望发生的事情,我正在使用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');
}
});
}
问题:订单不符合我的预期
点击按钮后,模型或网址不会立即显示。相反,当我再次单击该按钮时会显示
同时,由于我不确定我是否正确使用了Promise,因此我在第二个功能上尝试了以下操作:
$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子句在分配布尔值之前执行,布尔值未定义
所以,我只需要一些帮助来解决问题
最佳答案
尝试将检查功能更改为此
$scope.checking = function(arg){
return $http.post('path/')
.then(function(r) {
return r;
},function(error){
return error;
});
}
关于javascript - 依次调用Javascript函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40848630/