Javascript调用函数按顺序排列

时间:2016-11-28 16:05:02

标签: javascript angularjs

这是我期望发生的事情,我使用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未定义

所以,我只需要一些帮助来解决问题

2 个答案:

答案 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