如何从回调函数中访问异步 angularjs 服务数据
How to access asynchronous angularjs service data out of the call back function
我有一个表单提交,我需要单独验证我的电子邮件 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');
}
从我以前的帖子中获得一些更新后,我开始知道
$scopevalidEmailId 回调函数外无法访问。
所以我的代码会这样重写
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');
}
});
更多信息:http://solutionoptimist.com/2013/12/27/javascript-promise-chains-2/
在重定向时,您可能不会 need/want 分配给 $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
});
我有一个表单提交,我需要单独验证我的电子邮件 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');
}
从我以前的帖子中获得一些更新后,我开始知道 $scopevalidEmailId 回调函数外无法访问。
所以我的代码会这样重写
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');
}
});
更多信息:http://solutionoptimist.com/2013/12/27/javascript-promise-chains-2/
在重定向时,您可能不会 need/want 分配给 $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
});