示例
请考虑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以便一切正常?
将异步调用彼此嵌套将是“一个”。解决方案,我想,但考虑到正在进行的调用次数,这将无法解决所有问题,代码将变得非常难以理解。
答案 0 :(得分:0)
那么,如何将以下代码转换为使用链接,同时保持所有依赖项不变?:
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;
}