0
POSTとDELETEをそれぞれ実行する2つのループがあります。 すべての操作が完了したら、別のサービス要求を行いたい。非同期にプロミスを解決する
私の問題は: 削除操作でエラーが発生した場合、コントロールはcatchブロックに移り、項目を削除する必要があるかどうかを判断するためのダイアログ確認が必要です。
ダイアログから確認が得られた場合は、そのIDに永続的な削除を行いたいと思います。しかし、どういうわけかリフレッシュは私が望むより早く呼び出されます。私はここで何か基本的なことを忘れるあなたは関数がvar defer = $q.defer();
を始めていたときに、関数の最後の行は、通常あるべき基本的なルールとして
function submitAndRefresh(){
var deletePromisesTasks = [];
var addPromisesTasks = [];
angular.forEach(toBeDeleted, function(value,key){
deletePromisesTasks.push(delete(value.id));
});
angular.forEach(toBeAdded, function(value,key){
addPromisesTasks.push(add(value));
});
//To be performed after all the add/delete operations are completely done!
$q.all(deletePromisesTasks,addPromisesTasks).then(function(){
refreshData(); //Another Service Call
});
}
function delete(id, purge_flag) {
var defer = $q.defer();
deleteOrPurge(id, purge_flag).then((promise1) => {
defer.resolve();
}).catch(function(error) {
confirmAndDeleteContractParameters(error, delete, id, true);
}).finally(function(){
return defer.promise;
});
}
function deleteOrPurge(id, purge_flag){
return Service.items().delete({
id: id,
purge_flag: purge_flag || false
}).$promise;
}
function confirmAndDelete(error, callback, parameterId, purge_flag) {
var confirmModal = {
header: 'Confirm',
showCancelButton: true
};
try {
confirmModal.body = 'Some msg. Do you want to continue?';
} catch (e) {}
ModalService.confirmDialog($scope, confirmModal, function(confirm){
if (confirm) {
callback(parameterId, purge_flag);
}
});
}
'最後に(関数(){ リターンdefer.promise; }' 'function delete'から戻ることはありません –