这是我期望发生的事情,我正在使用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/

10-12 12:21