Javascript 如何从回调函数中访问异步angularjs服务数据
我有一个表单提交,我需要单独验证我的电子邮件id。基于电子邮件Id验证(使用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
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,则不会调用下一个函数。它将跳到捕捉块