等待承诺在接受召唤的承诺时得到解决

时间:2016-06-10 16:33:43

标签: angularjs angular-promise

我有一个 associateNewUserToProject 函数,如下所示,创建项目和用户的关联。如果 addUserToProject 服务中有任何异常,我需要删除用户。

function createNewUserFailureHandler (user) {
   return function (error) {
       UserService.deleteUser(user.userId);
   }; 
}
function associateNewUserToProject(responses, project) {
   var promises = [];
   for (var i = 0; i < responses.length; i++) {
      var failureHandler = createNewUserFailureHandler(responses[i][0].data);
      promises.push(ProjectService.addUserToProject(project.projectId, responses[i][0].data)
        .catch(failureHandler));
   }
   $q.all(promises).then(function () {
       onSave(responses);
   });
}
function deleteUser (userId) {
   var request = {
       method: 'DELETE',
       url: UrlBuilderService.buildApiUrl('user', String(userId))
   };
   return $http(request);
}

这没有任何问题。但我想等待 deleteUser 服务解决,我无法弄清楚。

如何在catch函数中创建一个promise并等待异常情况下解决catch-promise?我想在异常情况下解析 deleteUser 服务函数后调用onSave()方法。

1 个答案:

答案 0 :(得分:1)

问题是createNewUserFailureHandler返回一个空函数而不是一个promise。

这样做,它应该可以正常工作:

function createNewUserFailureHandler (user) {
    return function (error) {
        return UserService.deleteUser(user.userId);
    }; 
}