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?
There is no way to stop or break a forEach() loop other than by throwing an exception.
To continue in a JavaScript forEach loop you can't use the continue statement because you will get an error. Instead you will need to use the return statement in place of the continue statement because it will act in the same way when using a forEach because you pass in a callback into the forEach statement.
Unlike map() , forEach() always returns undefined and is not chainable.
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());
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With