如何在继续进入代码块之前等待函数执行?

时间:2015-12-16 10:55:09

标签: angularjs angularjs-directive angularjs-scope

我有一个函数$ scope.save()。这里调用另一个函数$ scope.validateFormat()只是为了验证一些值在验证函数内部进行一次Api调用并检查结果,如果值有效则返回并允许保存以保存我的值。如果无效,则将值setvalidity设置为false并抛出错误。 我的疑问是,当我在完成此功能之前尝试调用validateFormat()时,保存功能正在完成。

      $scope.save() = function(){
        // some code
        $scope.validateFormat();// calling the validate function
       // codde for saving value

       }
      $scope.validateFormat(){
      // some API to get result
      if(success){
      // some code
       }
     else{
      $scope.filestatus.editFileField.$setValidity("fileField", false);
       return false;
        }

}

2 个答案:

答案 0 :(得分:4)

正如我在评论中提到的,这是一个使用回调的例子:

$scope.save = function(){
    // some code
    $scope.validateFormat(function (data) {
        if(!data.err) {
            // code for saving value
        }
    });
}

$scope.validateFormat = function(callback){
    // some API to get result
    $http.get('/something').then(function (success, error) {
        if(success){
            // some code
            callback({err: false});
        }
        else{
            $scope.filestatus.editFileField.$setValidity('fileField', false);
            callback({err: true});
        }
   });
}

您应该根据自己的需要进行调整。

有关javascript中回调的详细信息,请查看此answer

答案 1 :(得分:2)

我认为您应该使用 $ q 服务在此处创建承诺。

request.params.phoneVerificationCode