Angularjs链接。然后互相依赖

时间:2014-03-06 16:36:30

标签: javascript angularjs promise deferred

我在.then语句中设置了一系列事件。我希望我理解在这种情况下使用.when()的方法。在ngn-click上调用此函数。问题是我必须点击两次才能完成。 $ rootScope.csa有数据进入.then(函数)中使用的函数。我在Chrome调试器中进行检查时,一切正常,我相信这是因为调试器正在减慢应用程序并使其跟上自己的步伐。另外,当我完成调试器时,它的速度非常快,需要两次点击才能填充$ rootScope.csa.section.data,以便下一个函数按预期工作。前两个语句函数是包含在promise和$ timeout中的服务,$ timeout似乎不会延迟进程。我已多次查看q.derer()但无法解决在这种情况下如何实现它的问题。任何帮助或信息,以满足我正在寻找的需求将不胜感激。

audit.LockData('section', $scope.csa.ID, user.ID, $scope.csa.Revision)
    .then($rootScope.csa = audit.RecordsCheck($rootScope.csa))  //  gets data and pupulates it to the $rootscope.csa.section.data
    .then($rootScope.csa = audit.GetInstance($rootScope.csa), function(){ return $rootScope.csa})  //  gets ID(s) from $rootScope.csa.section.data.instances.ID(s) and populates them to the $rootScope.csa.section.instances
    .then(function() {if($rootScope.csa.section.data) $location.path('/Update')})
    .then(function() {if($rootScope.csa.section.data) $rootScope.$broadcast('root_updated')
});

1 个答案:

答案 0 :(得分:1)

您总是需要将回调函数传递给then,而不是某些调用结果(即使它是一个承诺)。我没有围绕这些功能做什么,但尝试

audit.LockData('section', $scope.csa.ID, user.ID, $scope.csa.Revision)
.then(function(lockResult) {
    return audit.RecordsCheck($rootScope.csa)) // gets data and pupulates it to the $rootscope.csa.section.data
})
.then(function(checkResult) {
    return audit.GetInstance($rootScope.csa) //  gets ID(s) from $rootScope.csa.section.data.instances.ID(s) and populates them to the $rootScope.csa.section.instances
})
.then(function(instance) {
    if ($rootScope.csa.section.data) {
        $location.path('/Update')
        $rootScope.$broadcast('root_updated')
    }
});