Javascript 如何从回调函数中访问异步angularjs服务数据

Javascript 如何从回调函数中访问异步angularjs服务数据,javascript,angularjs,angularjs-service,angularjs-controller,Javascript,Angularjs,Angularjs Service,Angularjs Controller,我有一个表单提交,我需要单独验证我的电子邮件id。基于电子邮件Id验证(使用validationService),我将提交表单,并从我的控制器调用formSubmissionService 我想在我的formController validationService.getEmailValidationResult.then(function(data){ $scope.validEmailId = data.exists; }); if($scope.validEmailId == t

我有一个表单提交,我需要单独验证我的电子邮件id。基于电子邮件Id验证(使用
validationService
),我将提交表单,并从我的控制器调用
formSubmissionService

我想在我的
formController

validationService.getEmailValidationResult.then(function(data){
    $scope.validEmailId = data.exists;
});

if($scope.validEmailId == true){
   formSubmissionService.submitForm().then(function(data){
      $scope.form.submitted = data;
   });
}

if($scope.form.submitted){
    $location.path('formSubmissionResponse');
}
从我以前的帖子中得到一些更新后,我知道 无法在回调函数之外访问$ScopeValidEmail

所以我的代码会像这样重写

validationService.getEmailValidationResult.then(function(data){
    $scope.validEmailId = data.exists;
    if($scope.validEmailId){
        formSubmissionService.submitForm.then(function(data){
            $scope.form.submitted = data;
            if($scope.form.submitted){
               $location.path('formSubmissionResponse');
            }
        )}; 
    }
});

是否有任何方法可以实现上述逻辑或重写的代码可以进一步改进

您可以将其进一步展平:

validationService.getEmailValidationResult.then(function(data){
    $scope.validEmailId = data.exists;
    if($scope.validEmailId){
       return formSubmissionService.submitForm();
    } else return $q.reject();
}).then(function(data){
     $scope.form.submitted = data;
     if($scope.form.submitted){
        $location.path('formSubmissionResponse');
     }
});

有关详细信息:

在重定向时,您可能不需要/不想分配给
$scope

validationService.getEmailValidationResult().then(function(data){
    if (!data.exists) {
        return $q.reject(new Error('bad email!'));
    }

    return formSubmissionService.submitForm();
})
.then(function(submit) {
    if (!submit) {
        return $q.reject(new Error('error submitting'));
    }

    $location.path('formSubmissionResponse');
})
.catch(function(e) {
    // error
});

我有这样一个要求,如果我得到的验证结果为false,那么我不想传播到下一个then函数。相反,我希望返回页面本身。如果
data.exists
为false,则不会调用下一个函数。它将跳到捕捉块