Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何知道angular何时完成延迟_Javascript_Angularjs - Fatal编程技术网

Javascript 如何知道angular何时完成延迟

Javascript 如何知道angular何时完成延迟,javascript,angularjs,Javascript,Angularjs,嗨,我正在努力理解角度的定义和承诺。 我想知道什么时候所有的承诺都完成了,这样我就可以隐藏一个“加载”消息。 下面是我的代码示例: $scope.buildTeam = function () { $scope.Message = "loading..."; var deferred = $q.defer(); var promiseList = []; c = $scope.teamModels[0]; for (index = 0; index

嗨,我正在努力理解角度的定义和承诺。 我想知道什么时候所有的承诺都完成了,这样我就可以隐藏一个“加载”消息。 下面是我的代码示例:

$scope.buildTeam = function () {
    $scope.Message = "loading...";

    var deferred = $q.defer();
    var promiseList = [];

    c = $scope.teamModels[0];

    for (index = 0; index < c.quantity; ++index) {
            var assignment = new teamAssignment(c.assignmentTypeId, $scope.parentAssignment.AssignmentId, c.description);
            promiseList.push(departmentService.addAssignment(assignment).then(function (result) {

                //added lead/captain. Now insert visually on page
                insertToScope($scope, result);

            }));
        }

    } 

    $q.all(promiseList).then(function () {
        deferred.resolve();
        $scope.Message = "Loaded.";
    });
}
部门服务如下所示:

departmentModule.factory('departmentService', function ($http, $q) {
return {
    addAssignment: function(assignment){
        var deferred = $q.defer();
        $http.post('/Department/addAssignmentReturnAssignmentRow', assignment).success(deferred.resolve).error(deferred.reject);
        return deferred.promise;
    }
});
所以我的问题是,我需要做什么才能在所有承诺都完成之后调用函数?
提前感谢您的反馈。

$q。所有人都应该做您需要的事情。如果您的代码不起作用,我会看到两种选择:

  • 您传入一个
    承诺列表
    ,该列表不包含您希望等待的所有承诺。调试您的代码,并检查是否传递了所有承诺。确保它是作为第一个参数传递的数组
  • 你传递的承诺在你期望它们解决之前就已经解决了。如果您在
    insertToScope
    中登录'A',在
    中登录'B',然后在
    $q.all
    中登录,您应该会看到
在控制台中


下面是一个简单的例子,展示了如何使用
$q.all()

据我所知,departmentService.addAssignment看起来是什么样子的?嗨,brianj-很好,我把它添加到了问题的末尾。谢谢。只要
insertToScope
在同一个摘要循环中完成,就不会有问题。请创建一个演示问题的Plunkr。仅供参考,您正在创建许多不需要的承诺
$http.post
返回一个承诺,因此您可以直接返回该承诺
$q.all
返回一个承诺,因此您不需要
延迟的
变量。@PieterHerroelen是正确的,您所做的被称为延迟的反模式。您好@PieterHerroelen,非常感谢。plunkr是如此简单,易于理解,我终于第一眼就“明白了”。
departmentModule.factory('departmentService', function ($http, $q) {
return {
    addAssignment: function(assignment){
        var deferred = $q.defer();
        $http.post('/Department/addAssignmentReturnAssignmentRow', assignment).success(deferred.resolve).error(deferred.reject);
        return deferred.promise;
    }
});
A
...
A
B