如何访问回调函数之外的异步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');
}
)};
}
});
有没有什么方法可以实现上述逻辑,或者重写后的代码可以进一步改进?
在重定向时,您可能不需要/不想分配给$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
});
您可以将其压平一点:
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/
相关文章:
- 当视图在AngularJS中返回时,我如何获得异步服务调用来更新视图
- 如果需要登录,Angularjs$http拦截器会暂停异步请求
- AngularJS:多个异步AJAX调用
- 使用 AngularJS 的异步调用
- Angularjs的异步API请求
- AngularJS:下载二进制图像时出现异步问题
- 如何访问回调函数之外的异步angularjs服务数据
- 当异步验证器在AngularJS中返回promise时提交表单
- AngularJS如何从异步调用返回值
- 异步加载AngularJS应用程序
- AngularJS完成异步加载后将内容添加到DOM
- 分析异步调用未更新AngularJS中的$scope变量
- AngularJS:在异步验证器完成之前阻止表单提交
- Angularjs 测试控制器内部的异步行为
- Angularjs 如何使路由异步
- 在 angularjs 中循环使用$q数组的异步函数
- AngularJS UI-if 状态变量设置值异步
- 使用 TypeScript 在 AngularJS 中的指令之间共享来自异步调用的数据
- 从ASP MVC异步加载Angularjs(AJAX)并执行它们
- 异步angularJS -如何等待每个请求回调