2016-06-10 135 views
1

我有一个associate新用户对项目功能如下,创建一个项目和用户的关联。如果在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函数中创建承诺并等待catch-promise在异常情况下得到解决?我想调用onSave()方法后deleteUser服务函数解析后发生异常。

+0

你能分享'UserService.deleteUser()'代码?这是一个http的承诺吗? –

+0

@MartinGottweis我用_deleteUser_服务函数更新了这个问题。它使用$ http – user1722043

回答

1

问题是createNewUserFailureHandler正在返回一个空函数而不是承诺。

只要做到这一点,它应该很好地工作:

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

非常感谢!我错过了这个返回声明!现在它按预期工作! :) – user1722043

+0

乐意帮忙。祝你的项目好运。 –