AngularJS:多个异步调用 - 如何

时间:2015-09-11 08:20:02

标签: javascript angularjs asynchronous

示例

请考虑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以便一切正常?

将异步调用彼此嵌套将是“一个”。解决方案,我想,但考虑到正在进行的调用次数,这将无法解决所有问题,代码将变得非常难以理解。

1 个答案:

答案 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;
}