2016-06-10 130 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

樂意幫忙。祝你的項目好運。 –