I have a forEach loop that check if there are conditions before pushing data in the array:
allow(id, perm, arr) {
const data = { "userId": id, "permissionId": perm };
arr.forEach(key => {
if (id !== key.userId) {
throw new Error('id does not exists');
} else {
if (perm === key.permissionId) {
throw new Error('perm exists in this id');
} else {
arr.push(data);
}
}
});
}
The original array arr
is like this:
[{"userId": 1,"permissionId": 1},
{"userId": 2,"permissionId": 1},
{"userId": 3,"permissionId": 0},
{"userId": 4,"permissionId": 0}]
if I use console.log()
all works, but when I throw an error the execution stops, but how can I manage the exceptions without stop looping?
throw
is designed to stop your loop/code invocation. If you want to throw those errors after loop, you can push all errors to the array and throw them at the end:
allow(id, perm, arr) {
const data = { "userId": id, "permissionId": perm };
const errors = [];
arr.forEach(key => {
if (id !== key.userId) {
errors.push('id does not exists');
} else {
if (perm === key.permissionId) {
errors.push('perm exists in this id');
} else {
arr.push(data);
}
}
});
if (errors.length > 0) {
throw new Error(errors.join());
}
}