AngularJS:多个异步调用-如何
AngularJS: Multiple async calls - how to
样本
请考虑一下这个Plunk。
背景
Plunk是我需要做的一个非常简单的样本。基本上,我需要得到一个包含验证结果的个人记录。该结果还将包括类信息,以便控制器可以分配适当的样式来指示强制状态(或不指示(。
问题
样本中最重要的函数是这个函数,self。Get将使用验证逻辑并产生一个结果。
self.Get('0f8fad5b-d9cb-469f-a165-70867728950e').then(function(result){
$scope.person = result.person;
$scope.validationResult = result.ValidateResult;
});
正如您所看到的(因为表单具有正确的值($scope.person被正确加载,但$scope.validationResult却不是。
问题
我怀疑连续异步调用存在时间问题,我如何修复这个Plunk,使一切正常工作?
我想,将异步调用嵌套在一起将是"一个"解决方案,但考虑到正在进行的调用的数量,这并不能解决所有问题,代码将变得非常不可读。
对于多个异步调用,我建议使用promise数组:
var promises = [];
promises.push(service1.get(...))
promises.push(service2.get(...))
promises.push(service3.get(...))
return $q.all(promises);
那么,如何将以下代码转换为使用链接,同时保持所有依赖项不变?:
self.Get = function (personId) {
// 1. Init
var defer = $q.defer();
var asyncCallsResult = {};
// 2. Get person
var person = self.GetTestPerson();
asyncCallsResult.person = person;
self.LoadPersonDetailProxy(person).then(function(personDetailProxy) {
$scope.personDetailProxy = personDetailProxy;
});
validationService.ValidateAsync($scope.personDetailProxy).then(function (validateResult) {
asyncCallsResult.ValidateResult = validateResult;
});
defer.resolve(asyncCallsResult);
return defer.promise;
}
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何在单击复选框后调用控制器方法
- Ajax 异步调用 - 如何克服这个问题
- ajax 调用如何将数据返回给变量
- 同步 jquery 调用 - 如何等到 jquery 方法执行竞争
- ajax对控制器的调用.如何指示成功、完成和错误
- AngularJS ng表-方法中的Rest调用-如何更新视图
- AngularJS:多个异步调用-如何
- AJAX调用如何检索我的javascript变量
- & # 39;负载# 39;事件在img 302重定向中被调用?如何测试这个
- Java REST调用如何与Web应用程序的前端相关
- 此方法调用如何工作
- JavaScript构造函数调用如何知道如何添加"self"变量返回对象
- 同步AJAX调用如何导致内存泄漏
- Javascript google api调用-如何添加“url丢失”如果响应中没有图片url,则返回json obj